私はここの多くの部分(Django / Ajaxなど)に慣れていないので、高レベルのCSFRの図は理解していますが、詳細を完全に把握しているわけではありません。
渡されるデータ量が多いため、リクエストをGETからPUTに変換する必要がありました。高レベルでは、HTTPSを介してdjangoアプリに対してAJAXPOSTAPI呼び出しを行っています。ページが提供されているのと同じドメインに対して呼び出しが行われます。
ただし、「CSRFcookieが設定されていません」というエラーが発生し続けます。
Django1.4を使用しています
CSRF保護を乗り越えるために、他の投稿で言及されているX-CSFRTokenをヘッダーに含め、投稿されたデータに{{csrf_token}}タグを含めました。ただし、そのタグがトークンに置き換えられているようには見えません。X-CSFRToken値は、要求時にNULLとして送信されます。なぜ設定されないのかわからない。
ajaxSetupでPOSTの前にCookieを取得するため、ページビューでensure_csrf_cookie()を使用する必要がないという印象を受けていますが、それも試しました。
私が間違っていることを考えますか?
関連コード:
siteUrl = "https://localhost:8443/"
$.ajaxSetup({
beforeSend: function(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]);
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
if (new RegExp("^"+siteUrl.replace("\\","\\\\")+".*").test(settings.url)) {
// Only send the token to URLs from our site.
xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
}
}
});
$.ajax({
url: submitUrl,
data: {'network_ids': JSON.stringify(network_ids),
'csrfmiddlewaretoken': '{{ csrf_token }}'},
type: 'POST',
crossDomain: true,
dataType: 'json',
cotentType: 'application/json',
success: function(mydata) {
console.log(mydata);
},
error: function(jqXHR, textStatus, errorThrown) {alert(textStatus); alert(errorThrown)}
})