일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- jwt
- JS module system
- FP 특징
- 리액트 렌더링 최적화
- 항해99 사전스터디
- 리액트 메모이제이션
- this
- chromatic error
- 함수형 프로그래밍 특징
- 알고리즘
- next js
- 리액트 메모
- 타입스크립트
- Js module
- 항해99 미니프로젝트
- v8 원리
- 리액트
- js배열 알고리즘
- 자바스크립트 엔진 v8
- toggle-btn
- 항해99
- gql restapi 차이
- 렌더링 최적화
- 웹팩 기본개념
- 코어자바스크립트
- 항해99 부트캠프
- 웹 크롤링
- 실행컨텍스트
- 테스트 코드 툴 비교
- 리덕스
- Today
- Total
Jaeilit
콘텐츠 보안정책(CSP) - XSS 공격 방어(2) 본문
1 ) https://jaeilit.tistory.com/90
1번글에서 CSP 와 XSS 를 간단하게 알아봤습니다.
CSP 를 설정하는 이유 )
콘텐츠 보안 정책은 XSS 공격, 데이터 인잭션 등을 막기 위한 클라이언트의 수단입니다.
html 의 <head> 태그 안에서 <meta> 태그로 정의 할 수 있지만,
meta 태그는 cdn 이 적용이 안되는 점과 HTTP 헤더에만 적용이 가능한 frame-ancestors 등의 문제가 있기 때문에 HTTP 헤더 사용하는 것이 저는 좋다고 생각합니다.
XSS 는 웹에서 스크립트를 실행할 때 해커가 스크립트에 악성 스크립트를 심어놓음으로써
1. 사용자가 로그인할때의 토큰, 쿠키 등과 같이 민감한 정보를 탈취 할 수 있습니다.
2. 악성 프로그램 다운로드는 안되지만 악성코드를 심어 놓을 수 있다. (트로이 목마 등)
3. 잘못 된 페이지를 노출 시킬 수 있다.
4. 정보를 탈취함으로써 일반적이지 않는 시스템 권한을 얻을 수도 있다.
공격방법 위키)
공격 방법에 따라 Stored XSS와 Reflected XSS로 나뉜다.
Stored XSS는 사이트 게시판이나 댓글, 닉네임 등 스크립트가 서버에 저장되어 실행되는 방식이고,
Reflected XSS는 보통 URL 파라미터에 스크립트를 넣어 서버에 저장하지 않고 그 즉시 스크립트를 만드는 방식이다. 후술된 내용 대부분은 Stored XSS라고 생각하면 된다. Reflected XSS의 경우 브라우저 자체에서 차단하는 경우가 많아 상대적으로 공격을 성공시키기 어렵다.
크로스 사이트 스크립팅이란 이름 답게, 자바스크립트를 사용하여 공격하는 경우가 많다. 공격 방법이 단순하고 가장 기초적이지만, 많은 웹사이트들이 XSS에 대한 방어 조치를 해두지 않아 공격을 받는 경우가 많다. 여러 사용자가 접근 가능한 게시판 등에 코드를 삽입하는 경우도 많으며, 경우에 따라서는 메일과 같은 매체를 통해서도 전파된다. 심지어는 닉네임에 코드를 심기도 한다.
물론, HTML을 사용하는 것이기 때문에, Text-Only 게시판이나, BBCode를 이용하는 위키위키 등에서는 XSS가 발생할 일은 없다. 단, 나무위키의 경우 {{{#!html HTML}}} 을 이용해서 HTML 태그를 사용할 수 있으므로 취약점이 있을 수도 있다. 그래서 나무위키 초반에는 스크립트 태그와 이벤트 속성도 막지 않았다. 물론, 이는 후에 대부분 수정되었다.
주로 CSRF를 하기 위해서 사용되기 때문에 종종 CSRF와 혼동되는 경우가 있으나, XSS는 자바스크립트를 실행시키는 것이고, CSRF는 특정한 행동을 시키는 것이므로 다르다.
검사)
보통 OWASP ZAP 프로그램으로 검사를 하는게 좋지만 경우에 따라 웹사이트에서도 간단히 할 수 있다.
Mozila 가 좀 더 자세히 봐주는 듯 하긴하다...
OWASP ZAP : https://www.zaproxy.org/
웹사이트 검사 https://securityheaders.com/
웹사이트 검사 Mozila/ https://observatory.mozilla.org/
nginx 헤더 설정)
사이트 보안을 위해 검사를 해봤을 때 가장 중요한 항목은 CSP 헤더 set 이다.
nginx 웹서버에는 엄청 많은.. 옵션들이 있었는데 그 중에서 여기에 맞는 것만 살펴보자.
1. X-Frame-Options
https://www.keycdn.com/blog/x-frame-options
Clickjacking(클릭재킹) 방지
iframe 을 클릭 했을 때 올바른 주소인척 클릭을 가로채서 다른 서버의 주소로 전송하는 방식
1. deny 프레임에서 페이지 로드를 완전히 비활성화합니다
2. sameorigin 페이지 자체와 동일한 출처의 프레임에 페이지를 로드할 수 있습니다.
3. allow-from uri 페이지가 지정된 원본 및/또는 도메인의 프레임에만 로드되도록 허용합니다.
add_header X-Frame-Options "SAMEORIGIN";
2. X-Content-Type-Options (MIME 유형)
MIME 유형이 오염되는 걸 방지합니다.
MIME 는 미디어 유형이라고도 하고 개발자도구 네트워크탭에서 content-type 을 의미하기도 합니다.
MIME 유형에는
이미지일때는 image/gif image/jpeg
비디오일 때는 aduio/???
요청헤더에 따라 정의 됩니다.
더 많은 MIME 유형
https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types
nosniff 을 설정하면 서버에서 text/html 이라고 내려주면 클라이언트는 text/html 으로 받습니다. 당연한 이야기이지만
오염을 방지한다 라는 의미로 생각하면 될 것 같습니다.
add_header X-Content-Type-Options nosniff;
3. X-XSS-Protection
https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/X-XSS-Protection
브라우저가 XSS 공격을 감지하면 페이지 렌더링을 중단하는 옵션입니다.
<옵션>
1. 0 : XSS 필터링 사용 안함
2. 1 : XSS 필터링을 사용하되 필터링 된 부분만 렌더링 하기
3. 1; mode=block : 필터링 하고 렌더링을 중단하기
add_header X-XSS-Protection "1; mode=block";
add_header Permissions-Policy "geolocation none;midi none;notifications none;push none;sync-xhr none;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;";
strict-origin 방문한 사이트가 https 일때만 남기도록 설정함.
add_header Referrer-Policy "strict-origin";
// 프록시에서 에러를 인터셉트 함
proxy_intercept_errors on;
// 에러코드를 정의하고 에러페이지로 연결
error_page 404 403 500 503 /error-page.html;
location = /error.html {
// 에러페이지에서 보여줄 페이지 경로
root /user/share/nginx/html/50x.html;
// location이 nginx 내부 요청에서만 유효하고 외부 요청에서는 404로 응답하도록 한다.
// 에러 페이지 등에 사용하면 좋다.
internal;
}
'TIL' 카테고리의 다른 글
pqsl db 생성 (0) | 2022.06.22 |
---|---|
nginx 로컬에서 띄우기 (0) | 2022.06.16 |
콘텐츠 보안정책(CSP) (0) | 2022.06.08 |
로컬에서 메타태그 테스트 하는 방법 (0) | 2022.05.26 |
SVG vs PNG (0) | 2022.05.24 |