AJAX를 사용하여 사용자 양식을 제출하고 AJAX를 통한 데이터 제출이 필요한 다른 사용자 상호 작용을 처리하는 내 사이트에서 Codeigniter의 CSRF 보호를 활성화했습니다. 결과적으로 "허용되지 않는 작업"에 대한 서버 측 오류가 발생했습니다. 나는 자바 스크립트가 수집하고 AJAX를 통해 제출 한 데이터 만이 서버로 전달되었고 결과적으로 CSRF 코드가 전송되지 않았다는 사실을 빨리 깨달았다. 그래서이 추가 후 값을 얻기 위해 csrf_test_name에 jQuery를 선택기를 사용하고 나에게 확인을 위해 서버에 토큰을 제출하는 가장 간단한 방법을 보인다Codeigniter CSRF 문자열을 AJAX를 통해 서버에 전달
<input type="hidden" name="csrf_test_name" value="dsflkabsdf888ads888XXXXXX" />
: 같은
생성 된 토큰 태그 보인다 서버가 확인할 수있는 내 게시물 데이터 아래의 코드에 따라 :
//get CSRF token
var csrf = $('[name="csrf_test_name"]').val();
//build the form data array
var form_data = {
csrf_test_name: csrf,
... ... ...
... ... ...
}
//send the form data to the server so it can be stored
$.ajax({
type: "POST",
data: form_data,
url: ...,
dataType: "html",
success: function(msg){
... ... ...
}//end success
});//end ajax
I는 서버와 고정되어 서버 측 오류로 데이터를 전송하고 모든 것이 잘 작동 모든 아약스 제출이 절차를 따랐다.
이 테스트하려면 올바르지 않은 CSRF 토큰으로 하드 코딩되어 있으며 서버가 불일치를 감지하고 표면에 오류 코드 500을 반환합니다.
제 질문은 이것이 안전한 방법일까요? 따라야 할 모범 사례가 있습니까? 나는 이것에 대해 검색하는 몇몇 구글을 해왔고, 다른 모든 방법들이 더 복잡해 보이고, 내 방식으로 볼 수없는 공격 벡터가 생기면/운동하는지 궁금하다.
나는 당신과 똑같은 방법을 사용하며 일반적으로 권장되는 방법입니다. AFIK는 안전하지만 더 이상 생각하지 않을 것입니다! – Motive
백엔드 코드에 논리적 인 흠집이 없다면 괜찮은 것처럼 보일 것입니다. 이는 아마도 거의 일어나지 않을 것입니다. 나는 당신이 그들이 일치하지 않을 때 500 에러를 반환하지 않도록 할 것이지만, 그것은 선호의 문제라고 생각합니다. 또한 가장 작은 XSS라도 10 개 중 9 개가 csrf 보호를 무효화합니다. –
의견을 보내 주셔서 감사합니다. 나는 Codeigniter를 사용하고 있으며 모든 글로벌 XSS 필터를 가지고 있으므로 Codeigniter 문서에 대한 대부분의 공격을 저지해야한다. – SimonBarker