通过 XML HTTP 请求发布发送密码(启用 HTTPS)

Posted

技术标签:

【中文标题】通过 XML HTTP 请求发布发送密码(启用 HTTPS)【英文标题】:Sending password over XML HTTP request post (HTTPS enabled) 【发布时间】:2021-07-12 00:32:15 【问题描述】:

可以使用一些帮助来整理在 XML 请求中发送密码的最佳实践。我需要从 html 表单中收集输入,如果提供的密码与服务器上的密码匹配,则将表单中的数据插入数据库。我想通过 javascript/XML 请求来执行此操作,这样我就可以使用innerHTMLresponseText 在适当的位置显示确认消息,而无需导航到新页面。这是我所拥有的一个例子。此服务器上启用了 HTTPS。

HTML sn-p:

<form  enctype='multipart/form-data' action='javascript:insert_and_confirm_data()'>
<input type='text' id='variable_1'>
<input type='text' id='variable_2>
<input type='password' id='password'>
<input type='submit'>

<div id='confirmation'></div>

Javascript 函数:

function insert_and_confirm_data() 
    if (this.readyState == 4 && this.status == 200) 
        document.getElementById("confirmation").innerHTML = this.responseText;
    
    var password = document.getElementById("password").value;
    var variable_1 = document.getElementById("variable_1 ").value;
    var variable_2 = document.getElementById("variable_2").value;
    url = 'process_data.php?password=' + password + '&variable_1=' + variable_1 + '&variable_2=' + variable_2;
    xmlhttp.open("POST", url, true);
    xmlhttp.send();

PHP sn-p (process_data.php):

$password = $_POST["password"];
if (password_verify($password, $uploadPass)) 
    // Get the other variables, insert them to a table, echo a confirmation message
 else 
    echo "<p>Incorrect password</p>";

这是发送密码以在服务器上验证的“有效”且安全的方式吗?我的直觉说,即使启用了 HTTPS 并使用 POST 而不是 GET,在 XML URL 中包含密码也是不行的。我知道如何修改它以直接调用 PHP 脚本,但我真的不想失去在同一页面上显示结果的能力。但我不知道如何在此设置中执行此操作的最佳实践。

【问题讨论】:

【参考方案1】:

由于您使用的是 POST,因此没有理由也使用 GET 参数。相反,您可以使用FormData 创建一个表单编码的有效负载并将其发布。你可能想给你的表单一个 id 来选择它。

const formData = new FormData(document.querySelector('form'));
xmlhttp.open("POST", "process_data.php", true);
xmlhttp.send(formData);

Retrieving a FormData object from an HTML form

【讨论】:

有趣,不知道这个功能。看起来真正要做的只是将密码和其他变量从在 URL 本身中发送到 XML 请求的正文中 - 在控制台详细信息中仍然可见。从安全的角度来看,我发送表单详细信息的方式、OP 中的方式与您的方式是否重要?还是仅使用 HTTPS 就能获得所需的所有安全性? https 应该足够安全。对于 RESTful API,登录端点不应​​该是 GET,在一些特殊情况之外,POST 请求不应该有 GET 参数,所以这就是促使我做出决定的原因。在控制台中显示密码是可以的。尝试登录一些热门网站,您会看到其中许多网站在控制台中公开了您的密码。我可以通过 Chase Bank 和 Outlook 查看我的密码。 FB 和 google 更进一步并隐藏密码是不值得的。 见***.com/questions/198462/…、***.com/questions/5868786/…和***.com/questions/611906/…

以上是关于通过 XML HTTP 请求发布发送密码(启用 HTTPS)的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 HTTP 安全地发送密码?

从Angular2应用程序发送http post请求时如何启用CORS

如何使用 curl 正确发送和接收 XML?

如何在从 jquery 发送 $.get 请求时启用 CORS?

如何通过 HTTP 使用 Java(或 C#)中的摘要身份验证 HTTP 发送 SOAP 请求?

如何通过 C 中的 HTTP POST 请求发送图像或二进制数据