使用PHP和MySQL创建安全的登录脚本,无需使用HTTPS

8

问题

WikiHow上的这篇文章是创建PHP和MySQL安全登录脚本的好参考吗?在警告部分,作者强调该代码只能与HTTPS一起使用。我无法使用HTTPS,但需要在PHP和MySQL中实现相对安全的登录脚本,因此想知道该脚本是否也适用于HTTP连接。

解决方案

使用第三方解决方案是创建PHP和MySQL安全登录脚本的最佳方法。通过利用PHP框架(例如Symfony、uLogin)或外部方案(例如Facebook、Google),可以避免创建全新的工作登录脚本以及授权(记住我功能)。如果其他人已经进行了彻底的研究并积累了经验来创建登录功能,则使用他们的工作更加安全和容易。


本文为您描述了足够的安全事项,以创建安全的PHP和MySQL登录脚本。http://www.kvcodes.com/2017/05/create-secure-login-system-php-mysql/ - Kvvaradha
@Kvvaradha:我不同意,它依赖于许多不好或过时的做法(使用global,静态配置,非预处理语句,缺乏适当的密码哈希工具等等),我不会向任何人推荐这个教程。 - Zarthus
2个回答

7
尽管您可以自己创建登录系统,但强烈建议让外部方为您完成。
这需要很多经验才能做到正确,而且往往做得不好。
虽然该教程对我来说看起来还不错,但有太多要考虑的因素,而且它似乎也有点过时了。PHP 5.5提供了password_hashpassword_verify,我建议您使用它们,而不是您的页面所建议的方法。
因此,如果您必须制作自己的系统,请考虑利用上述函数,如果您受限于较低的php版本,则可使用可用的版本5.3.7的后移如果您不必制作自己的系统,请利用外部方(Google、Facebook)为您处理登录,或利用具有身份验证支持的框架。

总的来说:不要试图自己做,利用其他有多年经验的人所提供的。因为这非常难以做到正确。


1
我是一名经验丰富的程序员,但我担心页面上描述的脚本有些过时和不正确(正如你所提到的)。仅依赖一个来源来创建这样的登录脚本绝对不是“安全”的。我不太喜欢使用像Google或Facebook这样的外部方案,而是更愿意使用带有身份验证支持的框架。你推荐特定的框架吗?uLogin怎么样?链接 - maikovich
很多人似乎喜欢Symfony,我以前从未听说过uLogin。 - Zarthus

3
该脚本在用户输入密码后会在浏览器中安全加密密码,并在表单提交前清除明文密码字段,因此第三方无法读取密码。在这种程度上,该脚本可以安全地在HTTP上使用。
然而,表单的其余数据 - 用户姓名、电子邮件地址等 - 不是以安全方式发送的,因此第三方(例如中间人)可以通过阅读表单发送的未加密的个人身份信息来识别用户。不仅会使您的用户容易受到攻击,而且处理用户数据的不安全可能会使您的雇主/客户在数据被嗅探/黑客/窃取的情况下面临法律风险。
还有一个真正的风险,就是中间人可能在接收到托管脚本的服务器之前拦截并修改传输的数据而不被察觉。HTTPS/SSL不仅保护密码,还确保没有数据被篡改。
正如Zarthus所提到的,最好的做法是选择第三方解决方案,特别是如果您无法为自己的解决方案提供HTTPS。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接