[英]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.