Ajax到PHP登录脚本安全

ngp*_*und 9 javascript php ajax password-protection

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

在过去,我使用了以下类型的示例:

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

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

SQLfiddle

Rob*_*_vH 6

为了安全起见,您至少需要确保三件事:

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

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

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

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

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

您可以考虑使用OAuth2提供商,例如Google和Facebook.