对HTTPS地址的XMLHTTP POST请求是否使用任何加密?

时间:2018-08-08 01:48:18

标签: 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.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中包含加密的安全方法?我的想法是在将请求发送到服务器之前,使用网站的公钥对请求进行加密,但是我找不到其他尝试进行客户端加密的人。

一个粗略的例子:

enter image description here

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);

我没有学习计算机科学,也没有在线找到任何相关信息。普遍接受的方法是什么?

1 个答案:

答案 0 :(得分:2)

XMLHttpRequest中的HTTP和XML部分一样,只是一个遗留的命名方案。由于所使用的请求不仅可以包含h​​ttp协议网址,而且还可以接收更多的XML响应正文。

例如,最初的W3C工作草案通过说出XMLHttpRequest对象:

  

https://www.w3.org/TR/2006/WD-XMLHttpRequest-20060927/#introduction

     

该对象的名称是XMLHttpRequest以与Web兼容   否则就没有多大意义了。它支持运输   除XML之外的其他数据格式,某些实现支持   除HTTP之外的其他协议(该功能未在   但是该API也支持发送数据。

请注意“某些实现” ,因为这是2006年的工作草案,所以并不是每个人都使用相同的实现。

当前XMLHttpRequest的whatwg规范对此名称进行了说明:

  

https://xhr.spec.whatwg.org/#introduction

     

名称XMLHttpRequest是历史名称,与其名称无关   功能。

只要使用的浏览器根据规范实现XMLHttpRequest,请求/响应就将被浏览器正常对待,即为https加密。