AJAX-запрос сбой для CSRF в некоторых браузерах - PullRequest
0 голосов
/ 04 августа 2011

я использую django и jquery для своего приложения, я дошел до того, что начал использовать ajax, но сначала это не получалось.Затем я обнаружил статью, в которой говорится, что я должен каким-то образом отослать csrf_token в своем посте, поэтому я использовал следующий скрипт

$(document).ajaxSend(function(event, xhr, settings) {
function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
function sameOrigin(url) {
// url could be relative or scheme relative or absolute
var host = document.location.host; // host + port
var protocol = document.location.protocol;
var sr_origin = '//' + host;
var origin = protocol + sr_origin;
// Allow absolute or scheme relative URLs to same origin
return (url == origin || url.slice(0, origin.length + 1) == origin + '/') ||
(url == sr_origin || url.slice(0, sr_origin.length + 1) == sr_origin + '/') ||
// or any other URL that isn't scheme relative or absolute i.e relative.
!(/^(\/\/|http:|https:).*/.test(url));
}
function safeMethod(method) {
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
if (!safeMethod(settings.type) && sameOrigin(settings.url)) {
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
}

, скрипт получает токен из cookie и включает его в каждую отправку ajax.По какой-то причине код отлично работает в Safari, но когда я пытаюсь использовать его с Chrome или FF, он не работает.

Я уже опубликовал код на временном сайте www.mazban-staging.com/blog/, когда страница загружена, справа находится календарь.Нажмите «Далее» и посмотрите, что произойдет, как я уже говорил только с Safari, он работает.

Может кто-нибудь посоветовать, как я могу решить эту проблему?

С уважением,

1 Ответ

0 голосов
/ 04 августа 2011

Я думаю, что проблема здесь в том, что Ffx и chrome блокируют чтение файла cookie http в отличие от сафари ... сказав, что вы можете вставить токен в скрытое поле следующим образом

<input type="hidden" value="crypttoken" />

Теперьдля самой обратной отправки вы отправляете обратно этот криптокен, и куки отправляются в любом случае, вы сравниваете их, и вы должны быть в безопасности.

Это также позволяет избежать использования сеанса или того, что вы используете для хранения криптокена на сервереside.

Мне интересно, как вы можете читать куки на Sadari

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...