【发布时间】:2019-01-15 04:19:03
【问题描述】:
如果我们使用javascript的http请求功能:
var request = new XMLHttpRequest();
到 https 地址,这是否会使用任何类型的加密,或者 MITM 是否能够看到我们发送的所有数据?
例子:
function createAuthToken(baseRestURL, callback) {
var APIPath = "account/api/session";
var CORSPath = "https://cors-anywhere.herokuapp.com/";
var completeRestURL = CORSPath + baseRestURL + APIPath;
console.log("REST API URL: " + completeRestURL);
var method = "POST";
var postData = "{\"tokenId\": \"" + document.getElementById('api_key').value + "\",\"secret\": \"" + document.getElementById('secret').value + "\",\"loginMode\": 1,\"applicationType\": 35}";
var async = true;
var request = new XMLHttpRequest();
request.onreadystatechange = function() {
if (request.readyState == 4 && (request.status == 200 || request.status == 201)) {
console.log("ONLOAD");
var status = request.status; // HTTP response status, e.g., 200 for "200 OK"
console.log(status);
var response = JSON.parse(request.responseText);
console.log(response.session_token);
return callback(response.session_token);
}
}
request.open(method, completRestURL, async);
request.setRequestHeader("Content-Type", "application/json");
request.setRequestHeader("Accept", "application/json");
request.send(postData);
后续问题:如果没有,有没有办法在我们的客户端 JavaScript 中包含安全的加密?我的想法是在将请求发送到服务器之前使用网站的公钥加密请求,但我找不到其他人尝试客户端加密。
粗略的例子:
var CryptoJS = require("crypto-js");
var stackOverflowKey = "30 82 01 0a 02 82 01..."
var postData = "{\"tokenId\": \"" + document.getElementById('api_key').value + "\",\"secret\": \"" + document.getElementById('secret').value + "\",\"loginMode\": 1,\"applicationType\": 35}";
var encryptedPostData = cryptoJS.hmacSHA256(postData, stackOverflowKey)
//let's skip the callback and request headers as they are the same as above
var request = new XMLHttpRequest();
request.open();
request.send(encryptedPostData);
我没有学习计算机科学,也无法在网上找到任何关于此的信息。这样做的普遍接受的方法是什么?
【问题讨论】:
-
是的,任何对 HTTPS 资源的请求(现代浏览器不会拒绝)都可以指望被端到端加密。
标签: javascript https xmlhttprequest cryptojs