簡體   English   中英

XMLHttpRequest:如何安全地傳遞“POST”參數(用戶名、密碼)?

[英]XMLHttpRequest: How do I pass 'POST' parameters safely (username, password)?

我有這段代碼:

function RequestLogin() 
  {
      var request = new XMLHttpRequest();
      request.onreadystatechange = function() {
          if (this.readyState == 4) 
          {
              alert(this.responseURL);
          }
      };

      request.open('POST', 'http://myserver/login');
      request.setRequestHeader('Content-type', 'multipart/form-data');
      request.send('user=myUsername&password=myPassword');
    }

如果我使用 HTTPS 而不是 http://myserver/login,這被認為是“安全的”嗎? 我不清楚的是我必須在request.send中綁定的參數,我在那里做什么? 我是否將它們附加到 URL 中,因此如果有人嗅探請求它們是可見的? 我曾經創建表格 Object 並將其傳遞到那里,但在這種情況下它不起作用。

這是我發現將參數傳遞給 POST 請求的唯一方法,但我是否不會通過執行'user=myUsername&password=myPassword'來公開參數?

謝謝

如果您 POST 到 HTTPS 端點,是的,那將是安全的。

我不清楚我必須在 request.send 中綁定的參數,我在那里做什么?

您將該字符串作為請求正文發送。 ,然后將其發送到指定的 URL, request.open('POST', 'http://myserver/login'); .

使用 HTTPS,路徑 ( /login ) 和請求正文都被加密; 窺探者將無法看到其中任何一個的實際內容。

我是否將它們附加到 URL 中,因此如果有人嗅探請求它們是可見的?

不,它們沒有附加在 URL 中——如果這樣做了,代碼將看起來像

request.open('POST', 'http://myserver/login?foo=bar&baz=buzz');

這對於 POST 來說會很奇怪——但如果它超過 HTTPS,它仍然是安全的,因為所有窺探者都能看到你和https://myserver正在對話。 他們將無法看到您正在與myserver上的哪個端點通信(因此, /login?以及隨后的所有內容都是私有的),並且他們也將無法看到請求的內容。

也就是說,最好像現在一樣.send數據

request.send(sensitiveInfo)

而不是 append 信息到 URL 因為 URL 有時存儲在服務器日志中。 它遠沒有允許任何觀察者看到正在發生的事情那么脆弱,但這仍然不是一個好主意。

您還可以考慮是否可以使用fetch而不是XMLHttpRequest - fetch被認為是更現代的請求方式。 它使用 Promises,可以說更直觀,並且自 2015 年以來一直得到瀏覽器的普遍支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM