Ajax到PHP登录脚本安全

时间:2014-05-12 09:02:30

标签: 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
    }
});

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

SQLfiddle

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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

      您可能考虑的另一种方法是使用OAuth2提供商,例如Google和Facebook。