Rails에서 배우는 XSS 취약점

1887 단어 Rails보안
웹 보안에 대해 공부 중이므로 학습 내용을 공개합니다.
스카스카 기사이지만 용서해주세요

연습 환경


  • 우분투 18.04.4
  • Ruby (2.6.6)
  • Rails (5.2.4.3)
  • database adapter mysql2 (0.5.3)

  • mysql (5.7.30)

  • 기사 투고, 코멘트 투고, 북마크 등을 할 수 있는 연습용 앱 「TARGET」
    GitHub 저장소 htps : // 기주 b. 코 m / 후미 타카 1 / 탄 t

    XSS 취약성이란?



    XSS에는 반사형, 지속형, DOM 베이스의 3 타입으로 분류되고, 단순히 XSS라고 하면 반사형 XSS를 가리키는 것이 많은 것 같습니다.

    상기의 3 타입에 공통되는 성질로서 「외부로부터의 파라미터를 이용해 web 페이지를 출력하고 있는 어플리케이션에 있어서, 임의의 html 요소나 속성이 삽입 할 수 버린다」곳이 XSS 취약성의 간입니다.

    삽입된 스크립트에 의해 세션이나 입력 데이터가 유출되거나, 유해한 조작이나 리디렉션이 가능하게 되는 등 많은 피해가 발생합니다.

    예 연습용 앱에는 게시물에 댓글을 달 수 있는 기능이 있습니다.


    스크립트 태그가 포함된 잘못된 댓글을 게시하면 브라우저는 스크립트 태그로 해석합니다.


    연습용 앱에서는 Rails의 기능에 의해 쿠키의 Httponly 속성이 부여되어 있으므로, Javascript로 세션을 취득할 수 없습니다.
    그러나 모든 페이지로 리디렉션하거나 불법 양식을 원래 페이지에 겹쳐서 표시할 수 있습니다.

    왜 발생하는가



    상기의 예에서는 외부로부터의 파라미터를 사용해 HTML 요소 내용을 출력할 때에, 특수 문자["'&< >]를 이스케이프 하고 있지 않는 것이 원인.
    등호 기호가 2개의 ERB식 <%== @comment.content %>로 의도적으로 이스케이프를 회피하고 있다.

    XSS 취약성이 발생할 수 있는 곳에는 ①HTML 속성값 ②HTML 요소 내용 ③링크 ④이벤트 핸들러 등이 있으며, 각각 이스케이프 방법이 다르므로 장소에 있던 이스케이프를 할 필요가 있다.
    각각의 이스케이프 방법에 대해서는 후일 기사로 합니다.

    좋은 웹페이지 즐겨찾기