IT/앱사용방법

시큐어코딩) 파이썬 CSRF(크로스 사이트 요청 위조) 공격 예방코드 예시

볼통통알파카 2022. 6. 15. 22:54
반응형
크로스 사이트 요청 위조(CSRF) 이해

사용자가 인지하지 못한 상황에서 공격자가 의도한 행위(수정, 삭제, 등록 등)를 요청하게 하는 공격

공격 대상은 XSS와 다르게 서버를 대상으로 공격 시도

 

프레임별 옵션 설정하는 방법

Django에서 CSRF 옵션 세팅

MIDDLEWARE = [
 'django.contrib.sessions.middleware.SessionMiddleware',
 # MIDDLEWARE csrf . 목록에서 항목을 활성화 한다
 'django.middleware.csrf.CsrfViewMiddleware',
 ......
]

settings.py에서 미들웨어 부분에 csrf 부분을 활성화해준다.

이후 스크립트에서 csrf 토큰을 명시해 준다.

 

html에서 토큰 입력 부분

 - form 태그 안에 적용해 준다.

<!--html page-->
<form action="" method="POST">    

 <!--csrf_token 사용 -->
 {% csrf_token %}

    <table>
        {{form.as_table}}
    </table>
       <input type="submit"/>
</form>

 

Flask에서 CSRF 옵션 설정

from flask import Flask     
from flask_wtf.csrf import CSRFProtect     
# CSRF 설정 추가
csrf = CSRFProtect(app)    
app = Flask(__name__)    
app.config[‘SECRET_KEY’] = os.environ.get('SECRET_KEY')
csrf.init_app(app)

 

html에서 csrf 토큰 명시

 - input 태그 부분에 명시해 준다.

<form action="" method="POST">    

 <!-- form csrf_token 태그 내부에 적용-->
    <input type="hidden" name="csrf_token" value="{{ csrf_token }}" />
    <table>
        {{table}}
    </table>
       <input type="submit"/>
</form>

 

CSRF 예방 하기 정리

1. 사용자로 받은 요청이 의도대로 작성되었는지 확인하는 과정이 필요함(화이트리스트, 필터링 등)

2. 파이썬에서 자주 활용되는 Django와 Flask에서는 csrf 점검해 주는 라이브러리가 있고, 이를 설정해 주면 예방에 도움이 됨

반응형