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创建登录功能。以下是我的步骤:
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"});