使用XMLHTTPRequest进行身份验证

时间:2011-08-28 10:45:36

标签: javascript ajax xmlhttprequest http-post

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

  1. 用户输入用户名和密码,然后点击“提交”按钮
  2. “提交”按钮调用XMLHTTPRequest
  3. XMLHTTPRequest将凭证发送到将验证的PHP页面 它
  4. 如果凭据正确,则创建会话,否则显示错误消息 没有刷新登录屏幕。
  5. 我的问题是:

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

    xmlhttp.open("GET","verifyCredentials.php",true);

4 个答案:

答案 0 :(得分:2)

要使用POST方法发布数据,请将open中的方法设置为POST,将 Content-Type 请求标头字段设置为application/x-www-form-urlencoded,对您进行编码相应的数据,并将其作为参数值传递给send

xmlhttp.open("POST", "verifyCredentials.php", true);
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlhttp.send(data);

您可以使用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"});

请注意,通过这种方式,数据仍然不受保护而不会被窃听。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果要对不安全的通道进行身份验证(不使用HTTPS),可以使用基于HMAC的登录协议。 HMAC可用于user authentication

我在Javascript(客户端)和Python(服务器端)中提供了此实现。您可以使用它作为示例开始,或找到另一个实现。可能在某处有PHP实现,但您可能需要根据需要对其进行修改。