PHP登录应用程序的安全性


PHP Security of login application

嘿,你们这些PHP极客和黑客,如果你们中有人听的话;o)我正在为一些即将到来的网站创建一个登录系统,我相信很多人都会使用它——或者至少我希望是这样:)

  • 所以,我的问题是:我的登录系统和诸如此类的东西什么时候足够安全?它会"足够安全"吗

我得到了表单验证,我在哪里检查,发送到数据库的内容。我的密码是md5散列的。人们被告知要创建强密码。

  • 有什么叫做"足够安全"的东西吗?
    • 我在想:所有像脸书这样的大网站,一定有比这更多的吗?这是我需要的东西吗?如果是,怎么做

一些链接和类似的东西,会很好。感谢转发:o)

安全是一个永无止境的过程。你的代码永远不会"足够安全"。你应该应用所有你知道的安全技术,并学习那些你不知道的技术。然后保持最新状态,监视日志,并根据需要更新代码。

一般来说,登录系统是一个不适合重新发明轮子的地方。有很多常用的系统都经过了很多人的检查和重新检查,可能比你或我自己编写的任何系统都更安全。这是一个很好的机会,可以利用"群众的智慧",使用经过良好测试的第三方系统。

如果您担心安全性,则不应该使用md5哈希来存储密码。Md5的设计是快速的,这意味着如果黑客得到了你的哈希,他们可以很快被破解。你应该使用类似bcrypt的东西来存储密码。

http://codahale.com/how-to-safely-store-a-password/

您有各种安全漏洞:

  • SQL注入
  • 跨站点脚本(XSS)
  • 跨站点请求伪造(CSRF)
  • 会话攻击
  • 使用不安全连接(非HTTPS)
  • 明文/弱加密中的密码
  • 弱密码

我建议您查找所有这些问题,并选择一个用于开发web应用程序的框架,该框架已经自动为您解决了所有或大部分这些问题。

BTW:md5已经不安全了,我建议你使用hash_hmac('sha256', $password, $salt),它也可以处理盐析。

我在阅读了自己的问题后发现了这一点,这有点讽刺。

我自己写了几个登录库,下面是我可以给出的建议:

  1. 验证表单输入(服务器端),防止XSS(跨站点脚本),CSS注入,&SQL注入
    • 正确的长度
    • ctype
    • 如果ctype不是字母数字,则添加斜线
    • 添加html实体以防止XSS,如果html是危险的,请使用html过滤器
    • 使用密码强度API来确保正确的密码
  2. 哈希密码,别忘了盐!MD5也很弱,请使用SHA-256
  3. 记录IP以防出现任何问题
  4. 对SQL数据库进行备份

尽管如此,我仍然建议您使用openID或php库/类

在我最新的小网站上,我希望通过使用openid,而不是完全实现我自己的身份验证系统,在一定程度上避免安全方面的复杂性。因此,我并不真正存储密码。

我相信MD5被认为是弱的,但我不相信这真的很重要-如果你能保证哈希的安全-通过使用openid,我把这个组件从等式中去掉了。当然,如果openid被拥有,那么,是的,显然这也是一个问题。

尽管如此,您还是需要做一些输入过滤。尽你所能限制你所接受的输入,确保你在一个完全修补的服务器上运行(经常登录),并确保你运行的进程无法访问他们不需要访问的东西。因此,例如,如果你的web服务以root身份运行,那么你应该让你的服务器进入pr0n的殿堂。

只是一些想法——当然,我并不是一个真正的安保人员。