대량 할당시 보안 위험을 방지하는 공식적인 방법은 attr_accessible입니다. 그러나 일부 프로그래머는 이것이 모델에 대한 직업이 아니라고 생각합니다 (또는 은 모델에 대해서만이 아닙니다).왜 params 해시를 분할하면 대량 할당시 보안 문제가 발생합니까?
@user = User.update_attributes(params[:user].slice(:name))
설명서에 명시 그러나 : 컨트롤러에 그것을하는 가장 간단한 방법은 PARAMS에게 해시 분할됩니다
참고 attr_accessible 의 장소에 조각을 제외하고 또는 해시 # 해시 #을 사용하여 속성을 살균하는 것은 충분한 보호를 제공하지 못합니다.
왜 그렇습니까? 매개 변수의 허용 목록 슬라이싱으로 충분한 보호 기능이 제공되지 않는 이유는 무엇입니까?
UPDATE :Rails 4.0 will ship strong-parameters, 매개 변수의 세련된 슬라이스, 그래서 전체 슬라이스 것은 결국 그렇게 나쁘지 않았다 같아요.
처음에는 불편할뿐입니다. 'attr_accesible'을 사용하면 (저장하지 않고) 모델에서': name'을 사용할 수 있지만,'.slice'를'params' 해시에서 제외하면 그렇게 할 수 없습니다. 'attr_accessible'을 사용하는 것은 훨씬 더 의미가 있습니다. 왜냐하면 다른 사람들에게 모델과의 속성 관계를 알려주고 있기 때문입니다. – Alex
@Alex : * attr_accessible *은 대량 할당을 관리하는 편리한 방법이라는 것을 알고 있습니다. 좋습니다.하지만 params [: xyz] .slice를 사용하는 보안 구멍은 무엇입니까? – tokland
레코드의 경우 [attr_accessible] (http://api.rubyonrails.org/classes/ActiveModel/MassAssignmentSecurity/ClassMethods.html#method-i-attr_accessible)에 다음과 같이 표시됩니다. "* 해시 # except 또는 해시 # 슬라이스 사용 attr_accessible to satitize 속성은 기본적으로 동일한 기능을 제공하지만 중첩 된 속성을 처리하는 것은 약간 까다 롭습니다. ""또한 [Edge API] (http://edgeapi.rubyonrails.org/classes/ActionController/StrongParameters .html)을 사용하여 Rails 4 문서를 미리 읽고, 레일스 4 이전에 무엇을 사용할 지에 대해서는 [strong_parameters plugin] (https://github.com/rails/strong_parameters)을 참조하십시오. – user664833