CSRF 또는 Cross-Site Request Forgery는 공격자가 다른 웹사이트의 피해자 세션에서 작업을 발생시킬 수 있는 웹사이트 취약점입니다. CSRF를 매우 위험하게 만드는 것 중 하나는 사용자 상호 작용이 필요하지 않으며 피해자가 익스플로잇이 포함된 웹 페이지를 보기만 하면 됩니다.
팁: CSRF는 일반적으로 문자 또는 "바다 서핑"으로 발음됩니다.
CSRF 공격은 어떻게 작동합니까?
이 공격은 공격자가 다른 웹사이트에서 요청하는 방법이 있는 웹사이트를 만드는 것과 관련됩니다. 이를 위해서는 버튼을 누르는 것과 같은 사용자 상호 작용이 필요할 수 있지만 상호 작용이 없을 수도 있습니다. JavaScript에는 작업이 자동으로 발생하도록 하는 방법이 있습니다. 예를 들어 0 x 0 픽셀 이미지는 사용자에게 표시되지 않지만 "src"가 다른 웹사이트에 요청하도록 구성할 수 있습니다.
JavaScript는 클라이언트 측 언어입니다. 즉, JavaScript 코드는 웹 서버가 아닌 브라우저에서 실행됩니다. 이 사실 덕분에 CSRF를 요청하는 컴퓨터는 실제로 피해자의 컴퓨터입니다. 불행히도 이것은 사용자가 가진 모든 권한으로 요청이 이루어졌음을 의미합니다. 공격 웹사이트가 피해자를 속여 CSRF 요청을 하게 하면 요청은 기본적으로 사용자가 정상적으로 요청하는 것과 구별할 수 없습니다.
CSRF는 브라우저가 권한이 없는 공격자에 의해 권한을 사용하도록 속임으로써 웹 브라우저에 대한 "혼란된 대리인 공격"의 한 예입니다. 이러한 권한은 대상 웹사이트에 대한 세션 및 인증 토큰입니다. 브라우저는 요청 시 이러한 세부 정보를 자동으로 포함합니다.
CSRF 공격은 배열하기가 다소 복잡합니다. 우선 대상 웹사이트에는 계정 삭제 등의 부작용이 있는 형식이나 URL이 있어야 합니다. 그런 다음 공격자는 원하는 작업을 수행하기 위해 요청을 작성해야 합니다. 마지막으로 공격자는 피해자가 대상 웹사이트에 로그인한 상태에서 익스플로잇이 포함된 웹페이지를 로드하도록 해야 합니다.
CSRF 문제를 방지하려면 CSRF 토큰을 포함하는 것이 가장 좋습니다. CSRF 토큰은 쿠키로 설정되는 무작위로 생성된 문자열이며 값을 포함하는 요청 헤더와 함께 모든 응답에 값을 포함해야 합니다. CSRF 공격에는 쿠키가 포함될 수 있지만 헤더를 설정하기 위해 CSRF 토큰 값을 결정할 수 있는 방법이 없으므로 공격이 거부됩니다.