View 외부에서 sanitize 메서드를 사용하려고 합니다.

2339 단어 RubyRails
현재 개발 중인 앱의 안전성 진단을 진행했으나 XSS(교차 선별) 같은 취약성이 발견돼 대응하기로 했다.
인터넷 개발자로서는 당연한 지식인 것 같지만 이번이 첫 대응이어서 까다롭다.몇 차례 좌절을 겪었기 때문에, 이번에는 그중의 하나를 쓰고 싶다.

이루고 싶은 일.


https://qiita.com/kamohicokamo/items/571c58f2d6738a7dfe6a
이 기사를 참고하여 XSS 대책을 위한 데이터 검증을 하고자 합니다.

예:


name.html.haml
'山田太郎<script>alert("山田太郎です")</script>'
이렇게 뜨면...

포함된 JavaScript가 실행되었습니다.이것은 안전성이 좋지 않다.
= sanitize '山田太郎<script>alert("山田太郎です")</script>'
사용sanitize
이렇게 하면script 탭이 제거되어 일반적인 텍스트가 됩니다.

그렇지만


sanitize에 특별히 쓸 수 있지만 html 라벨이 혼합된 문자열을 입력하는 단계에서 무효화하려고 합니다.
그러나 이 sanitize 방법은 조수 방법이기 때문에 View 이외에는 사용하기 어렵다.

메서드


나는 이런 느낌의 방법을 만들었다.
model
def remove_script_tag(str)
  ActionController::Base.helpers.sanitize(str)
end
sanitize 기본적으로 이 방법은 <script> 라벨 정도만 제거하여 remove_script_tag로 합니다.before_validationbefore_save에서 이 방법을 교묘하게 사용하면 악성 스크립트가 문자열로 보내져도 무효화될 수 있다.

컨디션


ruby 2.6.6
rails 6.0.3.2

좋은 웹페이지 즐겨찾기