XSS : Cross-site Scripting
웹에 자바스크립트 삽입 방법을 의미
router에서
@bp.route("/xss", methods=['GET'])
def xss():
xss_stirng = "<script>alert('flask reflected xss run')</script>"
return render_template('xss.html', name = xss_stirng)
xss.html에서
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<td>{{name}}</td>
</body>
</html>
url/xss를 입력하면
다음과 같이 출력이 되면 XSS를 방지한 것이다.
그 이유는 flask에서 해당 객체를 {{name}} 으로 가져오는데
이 때 전달되는 {{name}}이 string 이기 때문에 동작을 하지 않게 된다.
만약 스크립팅 동작을 원하면 어떻게 할 것인가?
{{name | safe}}
를 입력해주면 된다.
그럼
다음과 같이 동작이 되는 것을 알 수 있다.
모든 객체에 | safe를 할 경우 보안에 취약해지니 주의하자
또 다른 예방법
1. server-side
필터링을 걸어서 <를 '<'로 치환
2. client-side
v-html 사용하지 않기
3. cookie
http-only 옵션을 적용하면 자바스크립트의 document.cookie로 접근할 수 없다
ex
set_cookie("name", value = "value", httponly = True)
참조
반응형
'SW ENGINEERING > Flask' 카테고리의 다른 글
API 개발하기(17) - 인증 (0) | 2021.03.01 |
---|---|
서버사이드 렌더링 vs 클라이언트 사이드 렌더링 (0) | 2021.02.25 |
보안 점검 SQL Injection (0) | 2021.02.24 |
API 개발하기(16) - DB Schema (0) | 2021.02.21 |
API 개발하기(15) - REFACTORING (0) | 2021.02.21 |
최근댓글