XSS 란?
XSS는 Cross Site Scripting의 약자로써 사이트 간 스크립팅을 의미한다. XSS는 웹 애플리케이션에서 많이 나타는 취약점 중 하나로 웹사이트의 관리자가 아닌 악의적인 목적을 가진 제 3자가 웹 페이지(게시판 등)에 악성 스크립트를 삽입하여 의도하지 않은 명령을 실행 시키거나 세션,쿠키 등을 탈취하는 것을 의미한다.
이름처럼 대부분 스크립트를 이용한 공격이 이루어지며 SQL Injection과 함께 대표적인 취약점으로 알려져있다. 또한 공격 패턴이 너무 많고 다양하기에 "XSS 취약점이 없는 사이트는 없다."라는 말까지 있다.

XSS 특징
- 악성 스크립트가 클라이언트에서 실행됨.
- 공격대상 : 클라이언트.
- 목적 : 쿠키, 세션 갈취, 웹사이트 변조 등.
- 공격 패턴이 다양하고 계속 변화 꾸준한 감시와 관리가 받쳐주지 않는다면 누구도 XSS에서 안전할 수 없다.
XSS 대응방법
- 입/출력값 검증 : 입출력 값에 대해 목적에 맞는지 다양한 검증(정규표현식, 문자열 패턴, 길이 등)을 한다.
- 입력값 치환 : 태그에 사용되는 <, > 등의 기호를 <, > 등의 HTML entity로 치환해준다.
- HttpOnly 속성 사용 : 스크립트에서 document.cookie를 사용하여 쿠키에 접속하는 것을 방지하는 옵션을 사용한다.
- CSP(Content Security Policy) : 사이트에서 직접 컨테츠별로 정책을 정의하여 사이트에서 허용한 컨텐츠에만 접근하도록 하는 브라우저 표준 보안 정책을 적용한다.
- https://blog.naver.com/rbals7398 방지하기위해 한번 적용 해보기~
CSRF 란?
CSRF는 Cross Site Request Forgery의 줄임말로써 사이트 간 요청 위조를 의미한다. CSRF는 웹사이트의 취약점 공격중의 하나로써 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(등록, 수정, 삭제 등)를 특정 웹사이트에 요청하게 하는 것을 의미한다. 즉, 공격자가 CSRF의 취약점을 이용해서 사용자의 권한을 도용하여 특정 웹 사이트의 기능을 수행하게 하는 것으로써 의도치 않게 광고성 게시물이나 유해 게시물을 작성하는 것이 대표적인 예시 중의 하나이다.
CSRF는 공격자가 사용자의 컴퓨터를 감염시키거나 사이트 해킹을 해서 이뤄지는 공격이 아니므로
공격이 성공하려면 다음 조건을 만족해야 한다.
1. 위조 요청을 전송하는 서비스(ex : 페이스북)에 희생자가 로그인 상태여야함.
2. 희생자는 공격자가 만든 피싱 사이트에 접속해야함.

CSRF 특징
- 권한을 도용당한 클라이언트가 가짜 요청을 서버에 전송
- 공격대상 : 서버
- 목적 : 권한도용
CSRF 대응방법
- Referrer 검증
(Back -end 단에서 request 의 referrer을 확인하여 domain이 일치하는지 검증하는 방법).
request header에 있는 요청을 한 페이지의 정보가 담긴 referrer 속성을 검증하여 차단.
일반적으로 이 방법만으로도 대부분 방어가 가능할 수 있다.
- CSRF Token 사용
(Reffer검증이 불가한 환경일 시, Security Token을 활용한다).
랜덤한 수를 사용자의 세션에 저장하여 사용자의 모든 요청(Request)에 대하여 서버에서 검증하는 방법.
- CAPTCHA 사용
요즘은 거의 모든 웹사이트에서 캡차를 이용하는 것 같은데 캡차이미지상의 숫자/문자가 아니라면 해당 요청을 거부
하는 것이다.
- Double Sumbit Cookie 검증 : 세션을 사용 못하는 환경에서 사용하는 방법으로 웹브라우저의 Same Origin 정책으로
인해 자바스크립트에서 타 도메인의 쿠키 값을 확인/수정하지 못한다는 것을 이용한 방법이다. 스크립트 단에서 요청
시 난수 값을 생성하여 쿠키에 저장하고, 동일한 난수 값을 요청 파라미터로 서버에 전송한다. 서버에서는 쿠키의 토
큰 값과 요청시 들어온 파라미터의 토근 값이 일치하는 지 검사하는 방법이다.
- 이 외에도 form 태그를 입력할 시 GET방식을 지양하고 POST방식을 쓰도록 하는 것은 기본이라고 할 수 있다.
Reference
https://lucete1230-cyberpolice.tistory.com/23
'개발공부 > 개념정리' 카테고리의 다른 글
| REST API(RESTful API) (0) | 2022.04.01 |
|---|---|
| Spring Security 란? (0) | 2022.03.22 |
| 쿠키(Cookie), 세션(Session), 캐시(Cache)의 개념과 특징 (0) | 2022.03.18 |
| API(Application Programming Interface) (0) | 2022.03.14 |
| JWT (Json Web Token) (0) | 2022.03.14 |