我正处于打开网站的最后一步,但唯一让我抓狂的是php用户管理。我发现了很多关于构建这些系统的资源,我相信我可以用自己的方式编写它们。问题是,当涉及到安全时,我会非常害怕该怎么办。例如,当涉及到通过SSL发送敏感信息时,有些人建议确保信息在注册表中加密,这样攻击者就不会对其进行黑客攻击。还有一些人建议确保错误发生时不会显示调试消息,这样攻击者便无法追溯链接。等等。
现在,当我从这里和那里读到md5不再安全了,所以我想知道如何散列新的用户密码等等…我找到了一些程序员的链接,他们已经提供了一些用户管理,但不确定他们是否足够好,因为我担心安全性是CodeCanyon 的首要任务
那么现在我必须关注的安全措施是什么呢?有没有与此相关的资源?
谢谢,
你不必(不应该)在人们告诉你要实现的不同东西之间做出选择。良好的安全性总是分层的,这意味着您可以实现尽可能多的保护。这种方法有多种用途。每一层都可以防止不同的攻击。每一层都可以防止不同经验的攻击者。每一层都会增加攻击者所需的时间。
以下是一些对身份验证系统有用的提示。
- 不显示调试输出
- 不要使用MD5哈希。SHA2甚至更好,bcrypt更好
- 存储密码时使用盐
- 在表单上使用nonce(一次性令牌)
- 始终要求服务器和客户端之间进行SSL加密
- 在服务器上访问数据库时,请确保信息泄露或客户端操作不可能(例如。避免注入攻击,使用已准备好的数据库驱动程序语句等)
- 确保所有失败的登录(无论原因如何)花费相同的时间,以防止定时攻击
- 当登录用户开始一项有风险的操作(更改密码、付款等)时,请重新授权他
- 永远不要以明文形式存储密码,永远不要,任何地方都不要
- 要求密码的复杂性最低
- !!!保护您的php会话(另一个大主题,值得自己讨论)-
正如你所看到的,你可以做很多事情(更多的人可能会告诉你更多的事情),你真正应该做什么取决于你愿意接受的风险。但永远不要依赖单一的安全措施,永远要有分层的方法。
回答您的直接问题:已经证明MD5确实存在冲突,并且到处都是彩虹表(请参阅维基百科)。PHP确实有一些可用的哈希函数,它们都有不同的优点和缺点。另请参阅php.net上的评论部分。
关于一般的web应用程序安全性,我建议您查看OWASP项目,该项目旨在提高web应用程序的安全性。一个好的开始是查看十大安全漏洞(蓝色框中的"十大")。
使用sha1存储密码,防止sql注入和xss脚本作为输入字段。会话劫持,防止固定。
首先,您应该通过SSL(TSL)将数据发送到服务器,这将进行加密。此外,您应该对发送到服务器的任何表单使用CSRF保护。
当你已经实现了你的功能,他们工作时,你应该尝试自己破解你的网站。尝试通过表单注入SQL、JS,尝试操作表单发送后的日期,你也可以尝试生成错误,这些错误将写入你的PHP错误日志,即使在你的服务器设置较弱的情况下也可以执行。(http://en.wikipedia.org/wiki/Hardening_(计算)
当你将密码存储在数据库中时,使用种子哈希函数,如果有人能够破解你的数据库并获得哈希,那么如果没有种子,他将无法对其进行加密。
你会通过谷歌找到许多关于所有技术的信息。