csrf : CSRF란, Cross Site Request Forgery의 약자로, 한글 뜻으로는 사이트간 요청 위조를 뜻합니다.
CSRF는 웹 보안 취약점의 일종이며, 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(데이터 수정, 삭제, 등록 등) 을 특정 웹사이트에 요청하게 하는 공격입니다.
예를 들어, 피해자의 전자 메일 주소를 변경하거나 암호를 변경하거나 자금이체를 하는 등의 동작을 수행하게 할 수 있습니다.
특성에 따라, 공격자는 사용자의 계정에 대한 완전한 제어권을 얻을 수 있을 수도 있습니다.
CSRF 방어방법 - 사용자 입장
사용자 입장에서는 이상한 URL 을 함부로 클릭하지 않고, 의심이 되는 메일을 열어보지 않는것이 중요합니다. CSRF는 클릭만해도 바로 내가 의도하지 않은 action이 수행될 수 있기 때문입니다.
CSRF 방어방법 - 웹개발자/운영자 입장
Referer check (리퍼러 체크)
HTTP 요청 헤더(request header) 정보에서 Referrer 정보를 확인할 수 있습니다.
보통이라면 호스트(host)와 Referrer 값이 일치하므로 둘을 비교합니다.
CSRF 공격의 대부분 Referrer 값에 대한 검증만으로도 많은 수의 공격을 방어할 수 있다고 합니다.
Java servlet을 사용하신다면 아래와 같이 intercepter 클래스를 만들어서 모든 요청에 대해 referer check 할 수 있도록 방어가 가능합니다.
CAPTCHA 도입
요청시에 CAPTCHA 를 이용하여, CAPTHCA 인증코드가 없거나 틀리면 요청을 거부하도록 할 수 있습니다.
CSRF 토큰사용
사용자 세션에 임의에 값을 저장하여 모든 요청마다 해당 값을 포함하여 전송하도록 합니다.
서버에서 요청을 받을때마다, 세션에 저장된 값과 요청으로 전송된 값이 일치하여 검증하여 방어하는 방법입니다.
글 잘 봤습니다, 많은 도움이 되었습니다.