이제 Ruby on Rails Tutorial을 시도했습니다 (10).
이 기사에 대해…
평상시는 Ruby on Rails와 무연한 프로그래머입니다만, 지금 덧붙여 재미있게 하는 단순한 이유로부터 Ruby on Rails Tutorial 를 해 보려고 생각했습니다. 이번은 마지막 기사의 계속으로 제10장을 해 갑니다.
또, Rails 5.1에 대응한 제4판을 이용해, 또한 Hyper-V상에 인스톨한 Ubuntu 18.04의 환경에서 진행해 갑니다.
제10장 사용자 갱신, 표시, 삭제
이 장에서는 지금까지 미실장이었던 edit/update/index/destroy 액션을 구현해 REST 액션을 완성시킵니다.
모호했던 Strong Parameters 이해
참고
Rails4 | 신규 및 변경 기능 | 대량 할당 기능, 취약성 및 Strong Parameters
htps : // m / tbpgr / ms / 63028f5 19, 2d1617, 40
어쩐지 어리석은 것처럼 구현하고 있던 Strong Parameters. 실제로 어떤 취약성을 대책하고 있을까라고 생각하고 있었습니다만, 상기의 참고 사이트에서 브라우저의 개발자 툴을 사용해 취약성을 찌르는 방법이 해설되고 있어 드디어 확실히 와 네.
Ubuntu 18.04에 사전 설치된 Firefox (Ver.66.0.3)에서 실제로 해보려고합니다.
우선, 제10장 구현 완료 상태로부터 와자와 Strong Parameters를 사용하지 않게 디그레이드 해 봅시다.
app/controllers/users_controller.rb
def create
@user = User.new(params[:user].to_unsafe_h) # [※1]
if @user.save
log_in @user
flash[:success] = "Welcome to the Sample App!"
redirect_to @user
else
render 'new'
end
end
[※1]
params[:user]
로만 기술하면 Rails가 ActiveModel::ForbiddenAttributesError
를 발생시킵니다. 위험하기 때문에 사용하지 말라고 주의 환기해 주고 있습니다만, 이번은 검증이므로 to_unsafe_h
메소드를 사용해 무리하게 에러가 발생하지 않게 하고 있습니다.참고
htps : // 놀라운 l. 코m/쿠에 s치온 s/124330
디그레이드의 수정을 해도, 특히 유저 등록 처리의 동작에 변화는 없습니다.
이제 Firefox의 Inspector 기능을 시작하여 HTML을 다시 씁니다.
Inspector 탭을 열고 입력 양식 근처의 HTML을 마우스 오른쪽 버튼으로 클릭 ⇒ HTML로 편집을 선택합니다.
그리고 비밀번호 편집 HTML을 참고로 admin 플래그를 조작하는 확인란을 추가합니다.
HTML 편집을 마치고 브라우저 화면으로 돌아가면 가장된 Admin 확인란이 늘어나고 있습니다.
체크박스를 체크 있음으로 변경하고 [Create my account]를 누르면…
평소대로 사용자 등록이 가능했습니다.
시도에 Users 페이지로 전환하면 admin 권한이 없으면 표시되지 않는 delete 링크가 표시됩니다!
Rails의 출력을 보면 확실히 admin = 't'로 insert하고 있음을 알 수 있습니다.
이것은 꽤 좋지 않습니다.
대급으로 방금 전 디그레이드시킨
params[:user].to_unsafe_h
라고 하는 개소를 user_params
에 되돌립니다.그리고 마찬가지로 HTML을 편집하여 Admin 체크 박스를 늘리고 비슷한 순서로 사용자 등록해 봅니다.
그 때의 Rails의 출력을 보면 ...
Unpermitted parameter: :admin
라는 출력이 1행 증가하고 있습니다. 관리자는 허용되지 않기 때문에 연주 한 것 같습니다!사실, 관리자 권한은 부여되지 않았습니다.
실제로 취약성을 찔러 보면, 대책의 의미를 보다 알지 말라고 느꼈습니다.
그러면, 다음 번 제11장부터 재개하고 싶습니다.
Reference
이 문제에 관하여(이제 Ruby on Rails Tutorial을 시도했습니다 (10).), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/hideki0145/items/ea13e9ad81d38f2cc6a9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)