Javascript 对HTTPS地址的XMLHTTP POST请求是否使用任何加密?
如果我们使用javascript的http请求函数:Javascript 对HTTPS地址的XMLHTTP POST请求是否使用任何加密?,javascript,https,xmlhttprequest,cryptojs,Javascript,Https,Xmlhttprequest,Cryptojs,如果我们使用javascript的http请求函数: var request = new XMLHttpRequest(); 对于https地址,这将使用任何类型的加密还是MITM能够看到我们发送的所有数据 例如: function createAuthToken(baseRestURL, callback) { var APIPath = "account/api/session"; var CORSPath = "https://cors-anywhere.herokuap
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中包含安全的加密?我的想法是在将请求发送到服务器之前使用webisite的公钥对其进行加密,但我找不到任何其他人尝试客户端加密
粗略的例子:
我没有学习计算机科学,在网上也找不到关于这方面的任何东西。一般公认的方法是什么?XMLHttpRequest中的HTTP和XML部分一样,只是一个遗留的命名方案。因为所使用的请求可以不仅仅包括http协议URL,并且接收的不仅仅是XML响应体 例如,最初的W3C工作草案介绍了XMLHttpRequest对象,它说: 为了与web兼容,对象的名称为XMLHttpRequest 否则就没什么意义了。它支持交通运输 除了XML以外的其他数据格式,一些实现支持 除HTTP之外的其他协议(该功能未在 但此规范)和API也支持发送数据 请注意“一些实现”,因为这是2006年的工作草案,所以不是每个人都使用相同的实现 XMLHttpRequest的当前whatwg规范对名称有如下说明: XMLHttpRequest的名称是历史性的,与它的名称无关 功能
因此,只要所使用的浏览器根据规范实现XMLHttpRequest,请求/响应将被浏览器视为正常情况,即使用https进行加密。XMLHttpRequest中的HTTP和XML部分一样,只是一个遗留的命名方案。因为所使用的请求可以不仅仅包括http协议URL,并且接收的不仅仅是XML响应体 例如,最初的W3C工作草案介绍了XMLHttpRequest对象,它说: 为了与web兼容,对象的名称为XMLHttpRequest 否则就没什么意义了。它支持交通运输 除了XML以外的其他数据格式,一些实现支持 除HTTP之外的其他协议(该功能未在 但此规范)和API也支持发送数据 请注意“一些实现”,因为这是2006年的工作草案,所以不是每个人都使用相同的实现 XMLHttpRequest的当前whatwg规范对名称有如下说明: XMLHttpRequest的名称是历史性的,与它的名称无关 功能
因此,只要所使用的浏览器根据规范实现XMLHttpRequest,请求/响应将被浏览器视为正常情况,即https加密。是的,对https资源的任何请求(现代浏览器不会拒绝)都可以端到端加密。是的,对HTTPS资源的任何请求(现代浏览器不会拒绝)你可以指望得到端到端的加密。这是否意味着,当我发出POST请求(如示例)时,建立到服务器的SSL连接的整个过程都由我的浏览器为我实现?@JesseRezaKhorasanee是的,所有这些都由你来处理,因为没有低级api来访问控制权,ie没有用于设置SSL握手、连接等的api。这是否意味着当我发出POST请求(如示例)时,建立到服务器的SSL连接的整个过程都由我的浏览器为我实现?@JesseRezaKhorasanee是的,所有这些都由你来处理,因为没有低级api来访问这一精细的控制,ie没有用于设置SSL握手、连接等的api。
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);