XSS

SW ENGINEERING/Flask / / 2021. 2. 25. 16:41

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)

 

 

참조

velog.io/@skyepodium/XSS-%ED%81%AC%EB%A1%9C%EC%8A%A4-%EC%82%AC%EC%9D%B4%ED%8A%B8-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8C%85

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기