Ajax到PHP登录脚本安全

Ajax to PHP Login Script Secure

本文关键字:安全 登录脚本 PHP Ajax      更新时间:2023-09-26

我正在研究如何通过Ajax安全地将用户名和密码发送到PHP,以及如何在MySQL数据库中正确存储这些值。

在过去,我用过以下类型的例子:

var formData = {username:$('#username').val(), password:$('#password').val()};
//SEND
$.ajax({
    type: "POST",
    url: "/signin.php",
    data: formData,
    success: function(data) {
        //success
    }
});

这是通过JavaScript发送值,然后从PHP获得返回OKFAIL。但这足够安全吗?我希望有人能好心地给我指出从JavaScript到PHP发送敏感数据的正确和安全的方向。

SQLfiddle

要确保安全,您至少需要确保三件事:

  1. 输入框,type=密码用户输入密码的用户控件是密码输入类型,或为此目的设计的自定义控件,该控件已经过充分验证,可以不缓存等。
  2. 连接,https在当前状态下,您的问题没有提到连接是否通过https。如果登录框本身通过安全连接显示,则更安全。此外,ajax需要通过安全连接发布。
  3. 正确散列密码使用本地PHP密码散列API和散列密码,并将散列存储在数据库中。使用password_verify函数验证输入的密码。password_verify password_hash () ()

要做到"正确",你还应该考虑:

  1. 控制登录请求失败的速率和次数。
  2. 记录登录统计数据,以便您可以识别奇怪的行为并进行调查
  3. 使用浏览器端和服务器端密码强度测试来验证用户的新密码是否足够强
  4. 使用captcha防止行人自动化
  5. 创建专门用于身份验证的数据库用户。相应地限制表/模式访问。使用单独的子域进行身份验证。使用fastcgi-php或suphp设置用户对数据库的授权访问权限。允许普通PHP数据库用户只能从这个"沙箱"中读取信号量或其他登录状态凭据。

  6. 当用户输入他们的密码时,使用站点验证,ssl,以及他们在创建帐户时设置的验证"短语"或图片,以便他们可以确保他们输入到您的服务器。

此外,大多数安全问题将涉及到登录后的操作。您打算如何维护用户的会话?更高的安全性通常需要牺牲用户的便利性。您需要仔细考虑用户在经过身份验证后可以访问哪些类型的能力和信息。你的安全计划应该考虑到这一点。

你可以考虑的另一种选择是使用OAuth2提供商,如谷歌和Facebook。