2014-05-12 99 views
9

我在寻找如何通过Ajax发送用户名和密码安全PHP,以及如何也存储在MySQL数据库中的值正确了。阿贾克斯PHP登录脚本安全

在过去,我已经使用了以下类型的例子:

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

+0

我也想知道这 –

+6

这是正确和标准的方式,如果你想保护用户名和密码,而发送到服务器意味着你想要网络级别的安全性,为此使用HTTPS,确保你的数据将是加密 –

+1

如果您没有SSL,则可以对用户名和密码使用JavaScript公钥加密,并且只能在服务器上使用私钥并使用PHP进行解密。 – DanFromGermany

回答

6

是安全的,你需要确保以最小的三件事情:

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

做“正确的”,你还应该考虑:

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

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

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

你可以考虑另一种方法是使用了OAuth2提供商如谷歌和Facebook。

+0

值得注意的是,仅仅登录页面是https是不够的,*整个站点*必须仅仅是“https”。 –

+0

并且:**使用为此制作的脚本!**当有几种免费的优秀解决方案时,请勿尝试自行构建。这将节省你很多时间,压力和金钱! – Sliq

+0

@madarauchiha我完全同意。事实上,我最近不得不为那些不理解在不安全的页面上使用jQuery模式的jsonp不是一个可靠的解决方案的客户处理这个问题。由于*坚持模式设计,因此实施了iframe解决方案以包含https加载的登录微页面。最好的办法就是登陆一个安全的登录页面,这样用户就可以看到他正在通过安全链接进行通信。唉,只是一个雇用的枪。 –