🚫
Strong Parameters
Mass Assignment 공격 방지
Strong Parameters는 Mass Assignment 공격을 방지하는 Rails의 보안 기능입니다.
Mass Assignment 공격이란?
# 악의적인 사용자가 admin=true를 몰래 전송
POST /users { user: { name: "Hacker", email: "...", admin: true } }
방어:
def user_params
params.require(:user).permit(:name, :email, :password)
# admin 필드는 permit에 없으므로 자동 무시됨!
end
def create
@user = User.new(user_params) # 안전
# @user = User.new(params[:user]) # 위험! (Rails 4 이전 방식)
end
중첩 파라미터:
params.require(:post).permit(
:title, :content,
tags: [], # 배열
comments_attributes: [:id, :body] # 중첩 모델
)
역할별 다른 허용 필드:
def user_params
if current_user.admin?
params.require(:user).permit(:name, :email, :role, :admin)
else
params.require(:user).permit(:name, :email)
end
end
핵심 포인트
1
params.require(:model) — 필수 파라미터 키 검증
2
.permit(:field1, :field2) — 허용할 필드 화이트리스트
3
허용되지 않은 필드는 자동으로 필터링 (무시)
4
Model.create(permitted_params) 로 안전하게 생성
5
중첩: permit(tags: [], address: [:city, :zip])
6
역할별 분기로 admin/일반 사용자 다른 필드 허용
장점
- ✓ Mass Assignment 공격 원천 차단
- ✓ 허용 필드가 코드에 명시적
- ✓ Controller에서 관리 → Model에 보안 로직 불필요
- ✓ 중첩/배열 파라미터도 지원
단점
- ✗ 새 필드 추가 시 permit 업데이트 잊기 쉬움
- ✗ 복잡한 중첩 구조에서 설정이 까다로움
- ✗ 허용되지 않은 필드 무시를 모르면 디버깅 어려움
사용 사례
모든 폼 데이터 처리
API 요청 파라미터 필터링
역할별 권한 구분
중첩 폼 데이터 처리