※ 주의 : 보안 관련 학습은 자유이지만, 학습 내용을 사용한 경우 법적 책임은 행위자에게 있습니다.
(Note: Security-related learning is allowed, but the individual is solely responsible for any legal consequences arising from the use of the acquired knowledge.)
※ 공부 기록용 포스트이며, 검수를 하고 올리지만 간혹 잘 못된 정보가 있을 수도 있습니다.
[보안 공부] 12주 차 - CSRF
PC 화면에서 보시기 적합하도록 작성되었습니다.
CSRF (Cross-Site Request Forgery)
- XSS까지 잘 따라왔다면 어려울 것이 없다.
XSS에서, 서버는 큰 역할이 없고(있다면 reflected 정도) 스크립트로 사용자에게 공격을 했다면,
CSRF는 그 공격을 사용자에게 보내되, 사용자 권한을 가지고 한 번 꺾어서 서버로 넣는 것이다.
- 단어에서 보이듯이 Request Forgery = '요청 위조'이다.
- OSRF(On-Site Request Forgery)와 구분된다.
OSRF는 동일 사이트내에서 요청을 위조하는 것이라 sameSite, refferer검증 방법이 소용 없을 수도 있다.
- 가장 대표적인 예시가 비밀번호 변경 요청이다.
사용자를 악성 스크립가 삽입된 페이지로 유도하여 스크립트가 실행 되는데,(여기까지는 XSS와 같다.)
CSRF는 스크립트가 서버에게 비밀번호 변경 요청을 보내는 것이다.
요청을 받은 서버는 당연히 사용자가 비밀번호 변경을 요청했다고 생각하고 변경해 줄 것이다.
- 그래서 Request Forgery 이다.
- 방어방법
- Referer 검증
-> 요청이 발생한 출처를 확인하여 방어
- 안티 CSRF 토큰 사용
-> 정상적인 요청일 경우에만 안티 CSRF 토큰을 포함하여 요청 하도록 설계.
XSS를 했다면 추가로 알아야 할부분은 form태그 및 POST 전송과 안티 CSRF 토큰 정도 이다.