웹 보안 취약점 중 하나로, 공격자가 의도한 행위를 피해자의 의지와 상관없이 서버로 요청하게 만드는 취약점이다.
둘 다 클라이언트 공격이지만
XSS는 클라이언트 측 스크립트 삽입 공격,
CSRF는 서버로 요청을 보내게 만드는 공격이다.
시너지가 좋아 같이 연계하는 경우가 많다.
GET Method 대신 POST Method로 바꾸면 CSRF에 대응 할 수 있을까?
아니다. CSRF 취약점의 핵심 이유는 인증 정보가 없어 인증을 위조한게 문제가 되는 것이다.
비밀번호를 변경하려면 기존 비밀번호를 입력하게 하거나 2차로 인증하게 만든다.
허용할 referrer 리스트를 만들어 두고 해당 페이지에서 요청이 들어온 것이 아니라면 접근을 막는다. 하지만 확장성은 좀 떨어질 수 있다.
CSRF는 인증 정보가 없어서 발생하는 취약점이니 인증 정보를 따로 입력하지 않아도 인증되게 만든 랜덤한 토큰이다.
예를 들어 사용자가 마이페이지에서 비밀번호를 변경하고자 한다면 마이페이지에 접속할 때 CSRF토큰을 발행하고 변경 요청을 보낼 때 CSRF 토큰을 포함시킴으로써 사용자임을 인증하는 것이다.
<form>
<input>
<input type = "hidden" name="csrf_token" value= "fdsagsag(랜덤값)">
</form>
하지만 CSRF 토큰을 탈취할 수 있기 때문에 이 점에 주의하여야 한다.
자동화된 프로그램이 아닌 실제 사용자가 요청을 제출하고 있는지 확인한다.