我的基本目標是將某些數據從chrome插件發送到Django服務器。到目前爲止,我的基本嘗試看起來是這樣的:如何在Chrome插件中使用CSRF令牌/從其他來源
使用javascript捕獲插件代碼中的數據。
loginData = { 'username': document.getElementById("login-email").value, 'password': document.getElementById("login-password").value };
使用REST框架將其發送給Django。
csrfToken = getCookie('csrftoken'); $.ajax(login_url, { type: 'post', data: JSON.stringify(loginData), contentType: 'application/JSON', dataType: 'json', headers: { 'HTTP_X_CSRFTOKEN': csrfToken }, success: function (data, status, XhrObj) { // Do some stuff }, error: function (XhrObj, status, error) { // Do some other stuff } });
在那裏我卡住是我不斷收到錯誤響應{"detail":"CSRF Failed: CSRF token missing or incorrect."}
我試圖跟隨the instructions listed in Django's documentation for adding the CSRF header into requests,但是getCookie
功能他們宣稱那裏,因爲頁面,我從做這個總是返回null不是來自該域(請記住它在Chrome插件的「域」中),因此無法訪問我的cookie(正確如此)。
在那篇文檔中,他們提到「如果激活CSRF_USE_SESSIONS,則必須在您的HTML中包含CSRF標記,並使用JavaScript從DOM讀取標記。」但是,在你的HTML中不包括這個標記完全打敗了CSRF標記的目的?即它允許攻擊者終端獲得一個有效的CSRF令牌,然後他們可以用它來執行惡意攻擊,是正確的?
我也考慮過能夠get the cookie value directly from the AJAX response,但是這也被阻止,以防止我試圖做的「攻擊」的確切類型。
我確實看到當我檢查名爲'csrftoken'的cookie與我的請求一起發送的流量時,所以我想我也有點困惑,爲什麼Django希望我將它拉出來HTTP頭,而不是從已經發送的cookie中讀取它。
所以,我想,有兩個問題:
- 不Django的包括在HTML的CSRF令牌徹底擊垮的目的說CSRF令牌?
- 將數據提交到遠程API而不打開Chrome擴展的安全漏洞的方式是什麼?
Re:從另一個域獲取cookie,可以使用chrome.cookies API。 – wOxxOm