-
[TIL] CSRF, XSSTIL 2021. 7. 4. 23:17
cs 지식에 대해 공부할 때 노트에 저장했었는데
이렇게 하면 공부하는 티가 안나서 새로운 지식 공부하면 나중에 기억하기 편하게
메모 형식으로 정리좀 해보자라는 목적으로 다시 블로그를 시작하려고 한다.
- XSS란?
- 서버와의 정보 교환 시 해커가 중간에 스크립트를 넣어 사이트를 공격하는 방식
- 게시판에 글쓰기나 메일, 닉네임 같이 작성 가능한 위치에 코드를 삽입한다.
- 크게 2가지의 공격 방법이 있다.
Stored XSS(저장형) Reflected XSS(반사형) ▶ 가장 일반적인 XSS공격 유형이다.
▶ 정상적 평문x -> 스크립트 코드를 입력한다.
▶ 사용자가 게시물을 열람시, 공격자가 입력해놓은 악성 스크립트가 실행되어 사용자의 쿠키 정보가 유출되거나, 악성 스크립트가 기획한 공격에 당하게 된다.
▶ 저장된(지속적) XSS공격은 공격자가 웹 애플리케이션을 속여 데이터베이스에 악성코드를 저장하도록 하는 수법이다.
서버에 저장된 악성코드는 시스템 자체를 공격 할 수 있으며 웹 앱 사용자 상당수 또는 전체에 악성 코드를 전송할 수 있게 된다.
▶ 일반적인 예로는 블로그 댓글에 악성코드를 게시하는 것이 있다. (해당 블로그를 방문하는 사람은 누구나 악성코드의 피해자가 될 수 있다.)
▶ 따라서 지속적(저장형) XSS 가장 위험한 XSS공격 유형이다.▶ URL의 변수 부분처럼 스크립트 코드를 입력하는 동시에 결과가 바로 전해지는 공격기법이다.
▶ 반사된 XSS는 피싱 공격의 일부로 자주 사용되며 악용하기도, 차단하기도 가장 쉽다.
▶ 공격자가 HTTP 요청에 악성 콘텐츠를 주입하면 그 결과가 사용자에게 "반사되는" 형태이다.
▶ 링크를 클릭하도록 피해자를 속이고, 유인해 세션을 하이재킹 할 수 있는 공격이다.
▶ 반사된 XSS는 피싱 공격에서 가장 많이 사용된다.
▶ 웹 애플리케이션은 악성코드를 피해자에게 반사해 피해자의 웹 브라우저에서 악성코드를 실행할 수 있다.출처 : https://dlsdn73.tistory.com/634
- CSRF란?
- 사용자 의지와는 무관하게 특정 웹사이트에 공격 요청을 보내는 방식
- 피싱 사이트를 이용하여 이용자가 정보를 입력하는 경우 해커가 의도하는데로 작동하는 방식
- CSRF 공격을 하려면 크게 2가지 조건을 만족해야 한다.
1. 위조 요청을 전송하는 서비스에 이용자가 로그인된 상태여야 한다.
2. 이용자가 피싱 사이트에 접속해야 한다.
- 방지 방법
XSS 방지 방법 CSRF 방지 방법 1. 쿠키에 중요한 정보를 담지 않고 서버에 중요정보를 저장하는 방법
2. 정보를 암호화 하는 방법
3. httponly 속성 on
(자바스크립트의 document.cookie를 이용해서 쿠키에 접속하는 것을 막는 옵션으로, 쿠키를 훔쳐가는 행위를 막기 위한 방법이다.)
4. Secure coding
(str_replace <치환함수로 XSS방지 대책이지만 미흡한 부분이 있다 -> url encoding>
htmlspecialchars <html 엔터티로 변환해줌> ..등
보안과 관련된 함수를 사용한다.)
▶ Encoding : 특정 플랫폼에서 문자를 표현하기 위한 규약1. Referrer 검증
(Back -end 단에서 request 의 referrer을 확인하여 domain이 일치하는지 검증하는 방법)
2. Security Token 사용
(Reffer검증이 불가한 환경일 시, Security Token을 활용한다.
사용자 세션에 임의의 난수 값을 저장하고, 사용자의 요청마다 해당 난수 값을 포함 시켜 전송한다.
이후 Back -end 단에서 요청을 받을 떄마다 세션에 저장된 토큰 값과 요청 파라미터에 전달되는 토큰 값이 일치한지 검증하는 방법)로그인 기능을 구현할 때 토큰을 사용하는 방식으로 구현했었는데 토큰을 사용하면 보안이 강화된다 정도로만 생각했지
어떤 공격으로부터 방어가 가능한지는 잘 몰랐었는데, 이번 기회에 알게되어 머리속에 정리가 착착 된거 같은 느낌이 든다. 이전에 get과 post 요청의 차이에서 보안과 관련된 내용이 있었는데 다시 한 번 봐야겠다는 생각을 하며 오늘은 여기까지!
참고 사이트
'TIL' 카테고리의 다른 글
[TIL] 이벤트 버블링, 캡처 (0) 2021.07.07 [TIL] react rifecycle - hook (0) 2021.07.06 [TIL] 비동기 (0) 2021.03.16 [TIL] Prototype Chain (0) 2021.02.26 [TIL] 객체 지향 언어란? (feat. 절차지향) (0) 2021.02.26