그래서 PHP 파일에 기본 .ajax() POST 메서드가 있습니다.jQuery .ajax()에 CSRF 토큰이 필요합니까?
어떤 보안 대책이 필요합니까?
AJAX를 통해 보내고 PHP 파일에서 확인하는 숨겨진 MD5 입력 필드를 사용하여 몇 줄의 게시물을 언급하고 있습니다. 이 방법으로 충분합니까?
그래서 PHP 파일에 기본 .ajax() POST 메서드가 있습니다.jQuery .ajax()에 CSRF 토큰이 필요합니까?
어떤 보안 대책이 필요합니까?
AJAX를 통해 보내고 PHP 파일에서 확인하는 숨겨진 MD5 입력 필드를 사용하여 몇 줄의 게시물을 언급하고 있습니다. 이 방법으로 충분합니까?
CSRF의 위험은 외부 사이트에서 사용자에게 데이터를 전송할 수 있으며 사용자 브라우저가 자동으로 인증 쿠키를 보내 게된다는 것입니다.
요청이 외부 사이트가 아닌 사이트의 다른 페이지에서 온 것인지 확인할 수 있도록 수신 작업 (사용자의 $.ajax()
메서드가 POST 데이터를 보내는 중)에 필요한 방법이 필요합니다.
두 가지 방법이 있지만 권장되는 방법은 확인 가능한 토큰과 해커가 연결할 수없는 토큰을 요청에 추가하는 것입니다. 간단한에서
: 토큰 긴 임의의 문자열을 생성하고 사용자에 대해 저장에 로그에
$.ajax()
요청에 매개 변수를 추가하십시오.해커는 사용자의 DB 접근 할 수 없습니다 실제로 당신이 사용자에게 전송 한 페이지를 읽을 수 없습니다 (그들은에서 XSS 공격을 얻을하지 않는 한,하지만 그것은 또 다른 문제입니다) 그래서를 스푸핑 수 없습니다 토큰. 토큰에 중요한
모든 당신이을 예측 (및 확인) 할 수 있다는 것입니다 그것을하고 그 해커는 수 없습니다.
이러한 이유로 DB를 통해 임의로 길고 무작위로 생성하는 것이 가장 쉽지만 대신 암호화 된 것을 만들 수 있습니다. CSR의 공격자가 토큰을 생성하는 방법을 알아 내면 해킹 당할 것입니다.
또 다른 방법은 공격자가 쿠키를 읽거나 변경할 수 없기 때문에 토큰을 데이터베이스에 저장하는 대신 쿠키에 저장하는 것입니다. 그런 다음 쿠키의 HTTP POST 데이터와 일치하는 토큰입니다.
토큰이 성공적으로 사용될 때마다 변경되는 토큰 (다시 제출하지 못하도록 함)이나 사용자 및 작업과 관련된 토큰과 같이 더 정교해질 수 있지만 기본 패턴입니다.
요청 위조와 관련하여 클라이언트가 요청한 내용을 어떻게 보내는지는 중요하지 않습니다. 동일한 유형의 게시물과 동일한 아약스 게시물에는 동일한 CSRF 규칙이 적용됩니다.
CSRF prevention cheat sheet을 읽는 것이 좋습니다. 사용자 별 비밀 토큰을 사용하는 것이 가장 보편적 인 보호 방법입니다.
아주 일반적인 또한 처음 사용 후 특정 사용자 및 장애인을위한 인수 요청 당 한 번만 토큰입니다. – Tadeck
@Tadeck 그 접근 방식은 CSRF보다 이중 제출을 방지하는 데 더 유용합니다. – rook
[참조한 출처] (https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet)에 명시된 바와 같이 일회성 토큰은 고위험 기능 내에서 사용되는 매우 강력한 보안입니다. 이것은 "CSRF_보다 이중 제출을 방지하는 데 더 유용합니다"라는 것의 반대입니다. CSRF에 대한 귀하의 신청서를보다 엄격하게 보호하는 방법입니다. – Tadeck
토큰이 필요하지 않지만 CSRF에 대해 상태를 변경하는 기능은 보호해야합니다.
이 작업을 수행하는 간단한 방법 중 하나는 AJAX 요청과 함께 보내는 헤더를 추가하는 것입니다. 임의의 토큰이 필요하지 않습니다.
이 작동합니다.
물론 서버 측 코드는 동작을 실행하기 전에 헤더가 존재하는지 확인해야합니다.
[동일 출처 정책] (https://en.wikipedia.org/wiki/Same-origin_policy)이 그러한 행동을 막을 수 있지만 어떻게 사용자가 다른 웹 사이트에서 AJAX 요청을 게시 할 수 있습니까? – Songo
@Songo 불행히도 모든 브라우저가이를 지원하지는 않습니다. 프락시가 많으면 머리글을 벗겨 내고 너무 끊어집니다. 결국 AJAX를 의도하더라도 공격자가 될 것이라는 의미는 아니지만 원본 외부에서 POST 할 수 있습니다. 기본적으로 동일한 출처 정책이 있어야하지만 잘 작동하는 브라우저를 사용하기 때문에 의존하지 않아야합니다. CSRF 토큰을 사용하면 동일한 출처를 우회하더라도 사용자가 확인할 수있는 것을 제공합니다. – Keith
@Songo 최신 버전의 Chrome에서도 GET 요청 (예 : 웹 페이지에서'''''태그)을 사용할 수 있으며 제대로 작동합니다. @Keith 브라우저가 모든 요청에 대해 웹 페이지에 쿠키를 자동 전송하므로 쿠키를 신뢰하지 않습니다. 공격자가 iFrame 또는 양식을 사용하면 쿠키가 자동으로 전송됩니다. – arleslie