2

我正在最后一步打开我的网站,但唯一让我抓狂的是 php 用户管理。我找到了很多关于构建这些系统的资源,我相信我可以用自己的方式编写它们。问题是,当涉及到安全性时,我会非常害怕该怎么做。例如,当涉及到通过 SSL 发送敏感信息时,有些人建议确保信息在注册表中被加密,这样攻击者就无法破解它。还有一些其他建议确保调试消息在发生错误时不显示,以便攻击者无法追溯链接.etc。

现在,当我从这里和那里读到 md5 不再安全所以我想知道如何散列新用户密码等...我找到了一些程序员的链接,这些程序员已经提供了一些用户管理,但不确定他们是否是足够好,因为我担心安全是优先事项CodeCanyon

那么现在我必须关注哪些安全措施?有没有相关的资源?

谢谢,

4

4 回答 4

4

您不必(您不应该)在人们告诉您实施的不同事物之间进行选择。良好的安全性总是分层的,这意味着您可以实施尽可能多的保护。这种方法有多种用途。每一层都可以防止不同的攻击。每一层都可以阻止具有不同经验的攻击者。每一层都会增加攻击者所需的时间。

以下是一些对身份验证系统有用的提示。

  • 不显示调试输出
  • 不要使用 MD5 哈希。SHA2 甚至更好,bcrypt 更好
  • 存储密码时使用盐
  • 在您的表单上使用随机数(一次性令牌)
  • 始终需要在服务器和客户端之间进行 SSL 加密
  • 访问服务器上的数据库时,确保信息泄漏或其客户端操作不可能(例如,避免注入攻击,数据库驱动程序使用准备好的语句等)
  • 确保所有失败的登录(无论是什么原因)花费相同的时间来防止定时攻击
  • 当登录用户开始进行危险操作(更改密码、支付等)时,重新认证他
  • 永远不要存储明文密码,永远不要,不要在任何地方
  • 要求密码的最低复杂度
  • !!!保护您的 php 会话(另一个大主题,值得单独讨论) -

正如你所看到的,你可以做很多事情(更多的人可能会告诉你更多的东西),你真正应该做什么取决于你愿意接受的风险。但永远不要依赖单一的安全措施,总是有一个分层的方法。

于 2012-02-06T09:13:31.037 回答
2

回答您的直接问题:已证明 MD5 确实存在冲突,并且周围有彩虹表(请参阅Wikipedia)。PHP 确实有很多可用的哈希函数,它们都有不同的优点和缺点。另请参阅 php.net 上的评论部分。

关于一般 Web 应用程序的安全性,我建议您看一下关于使 Web 应用程序更安全的OWASP 项目。一个好的开始是查看十大安全漏洞(蓝色框中的“十大”)。

于 2012-02-06T08:59:10.627 回答
1

使用 sha1 存储密码,防止 sql 注入和 xss 脚本作为输入字段。会话劫持,固定预防。

于 2012-02-06T08:57:36.033 回答
1

首先,您应该通过 SSL (TSL) 将数据发送到服务器,这将加密。此外,您应该对发送到服务器的任何表单使用 CSRF 保护。

当您实现了您的功能并且它们工作时,您应该尝试自己破解您的网站。尝试通过表单注入 SQL、JS,尝试在表单发送后操纵日期,您还可以尝试生成将写入 PHP 错误日志的错误,即使您的服务器设置较弱也可以执行。(http://en.wikipedia.org/wiki/Hardening_(计算))

当您将密码存储在数据库中时,请使用种子哈希函数,如果有人能够破解您的数据库并获得哈希,他将无法在没有种子的情况下对其进行加密。

你会通过谷歌找到很多关于所有技术的信息。

于 2012-02-06T09:00:05.190 回答