Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用XMLHTTPRequest进行身份验证_Javascript_Ajax_Xmlhttprequest_Http Post - Fatal编程技术网

Javascript 使用XMLHTTPRequest进行身份验证

Javascript 使用XMLHTTPRequest进行身份验证,javascript,ajax,xmlhttprequest,http-post,Javascript,Ajax,Xmlhttprequest,Http Post,众所周知,不建议使用GET方法登录(或发送敏感信息)。我想使用XMLHTTPRequest创建登录功能。以下是我的步骤: 用户输入用户名和密码,然后单击提交按钮 Submit按钮调用XMLHTTPRequest XMLHTTPRequest将凭证发送到PHP页面,该页面将验证 它 如果凭据正确,则创建会话,否则显示错误消息 不刷新登录屏幕 我的问题是: 如何使用POST(安全地)将登录凭据传输到PHP页面?如果我对GET使用如下所示的open方法,那么我认为它不安全。我可以用POST替换GET?

众所周知,不建议使用
GET
方法登录(或发送敏感信息)。我想使用XMLHTTPRequest创建登录功能。以下是我的步骤:

  • 用户输入用户名和密码,然后单击提交按钮
  • Submit按钮调用XMLHTTPRequest
  • XMLHTTPRequest将凭证发送到PHP页面,该页面将验证 它
  • 如果凭据正确,则创建会话,否则显示错误消息 不刷新登录屏幕
  • 我的问题是:

    如何使用
    POST
    (安全地)将登录凭据传输到PHP页面?如果我对
    GET
    使用如下所示的
    open
    方法,那么我认为它不安全。我可以用
    POST
    替换
    GET
    ?如果是,那么如何传输凭据


    xmlhttp.open(“GET”,“verifyCredentials.php”,true)

    发送密码字段中的md5密码。然后,在服务器上,您可以根据需要对其进行进一步模糊处理。

    若要使用post方法发布数据,请将中的方法设置为
    post
    ,将内容类型请求标头字段设置为,相应地对数据进行编码,并将其作为参数值传递给:

    您可以使用
    encodeURIComponent
    功能对数据进行编码:

    function formUrlEncoded(params) {
        var data = "";
        for (var name in params) {
            if (!params.hasOwnProperty(name)) continue;
            if (data.length) data += "&";
            data += (encodeURIComponent(name) + "=" + encodeURIComponent(param)).replace(/%20/g, "+");
        }
        return data;
    }
    var data = formUrlEncoded({"foo":"bar", "baz":"quux"});
    

    请注意,这样传输数据时仍然不受窃听保护。

    POST
    GET
    的唯一区别在于
    POST
    在http正文中发送数据,而不是在URL(标头)中发送数据,因此这两种方法在传输登录凭据时都不“安全”。
    如前所述,您应该使用。

    如果您想通过不安全的通道(您没有使用HTTPS)进行身份验证,您可以使用基于HTTP的登录协议。HMAC可用于


    我在(客户端)和(服务器端)中提供了这方面的实现。您可以将其作为一个示例来开始,或者找到另一个实现。可能在某个地方有它的PHP实现,但您可能需要根据自己的需要修改它。

    使用HTTPS的安全连接,这是确保无法嗅探用户凭据的唯一方法。首先为什么要使用XMLHttpRequest?与使用Post(/Redirect/Get)发送普通表单相比,它有什么优势?@Marcel:我想使用XMLHTTPRequest,因为它将在后台验证凭据,并在没有刷新页面的情况下提供错误密码时显示错误,但您必须在正确登录后发送新页面,不是吗?你说的数据编码是什么意思?假设用户名、密码作为参数
    uname,传递给我的XMLHTTPRequest函数。如何编码?@iSumitG:您应该始终使用
    encodeURIComponent
    ,在JavaScript中正确编码查询参数@iSumitG:POST数据需要特殊的编码/格式。对于简单表单数据,假设为:;多部分表单数据需要。但这不安全,它只对用户凭据进行url编码。本质上它是明文。如果你不使用HTTPS,这是不安全的:不管你发送的是散列密码还是纯文本,它都可以被嗅探,然后用于登录。
    function formUrlEncoded(params) {
        var data = "";
        for (var name in params) {
            if (!params.hasOwnProperty(name)) continue;
            if (data.length) data += "&";
            data += (encodeURIComponent(name) + "=" + encodeURIComponent(param)).replace(/%20/g, "+");
        }
        return data;
    }
    var data = formUrlEncoded({"foo":"bar", "baz":"quux"});