2012-02-06 159 views
2

我在打开我的网站的最后一步,但唯一让我疯狂的是php用户管理。我发现了构建这些系统的大量资源,我相信我可以用自己的方式编写它们。问题是,当谈到安全问题时,我非常害怕发生什么事情。例如,当涉及通过SSL发送敏感信息时,一些人建议确保信息在注册表单中加密,以便攻击者无法破解它。还有一些其他建议要确保调试信息不​​会在错误发生时显示,以便攻击者无法回溯链接等。php用户管理系统

现在,我从这里和那里读取的MD5是不安全的,所以我想知道如何哈希新的用户密码等......我找到了一些已经提供了一些用户管理的程序员的链接,但没有确定它们是否足够好,因为我关心安全作为优先事项CodeCanyon

那么现在我需要关注哪些安全措施? 有没有与此相关的任何资源?

谢谢,

回答

4

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

以下是对验证系统有用的一些tipps。

  • 不显示调试输出
  • 不要使用MD5哈希值。存储密码在窗体上
  • 使用随机数(一次性令牌)
  • 始终要求服务器和客户端之间的SSL加密时SHA2甚至更好,bcrypt好得多
  • 使用盐
  • 当对访问数据库服务器,确保信息泄露或其客户端操作不可能(例如, 避免注入攻击,数据库驱动程序使用准备好的 语句等)
  • 确保所有失败的登录(无论是什么原因)防止时间攻击的时间相同
  • 当登录的用户开始有风险的操作(改变PWD,支付等),重新authgenticate他
  • 切勿将密码明文,而不是以往任何时候都没有在任何地方
  • 需要最低限度的复杂的密码
  • !!!保护你的php会话(另一大主题,值得自己讨论) -

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

+0

非常感谢** ultimA **的回应。我可以看到你列出了所有可能引起关注的问题。我相信我必须不断寻找所有这些问题的解决方案。再次感谢。 “ – 2012-02-06 12:36:16

+1

”列出了所有可能的问题“ - 谢谢,但名单远远没有完成。这些仅仅是一些例子,还有其他一些与安全有关的事情,比如登录限制,确保使用一个好的随机源验证脚本的所有输入(参数和用户输入),使用浏览器功能(HSTS,x-frame-选项等)以及可能还有一些其他东西,这些东西或者不在我的脑海里,或者我甚至不知道。 – ultimA 2012-02-07 21:13:18

1

使用SHA1,用于存储口令,防止SQL注入和XSS脚本作为输入字段。 会话劫持,注视预防。

+0

感谢您的评论,但正如ultimA所提到的,这是一个非常漫长的方式来保证事情安全。 – 2012-02-06 13:10:41

+0

只是一个快速的问题队友,是否有一个完整和安全的系统被称为非常好,它不是免费的! – 2012-02-06 14:20:05

+0

谢谢。我想最好是使用b-crypt,因为它更好,更安全。欢呼声 – 2012-02-07 02:38:15

2

回答你的直接问题:已经证明,MD5确实有碰撞,并且有彩虹桌漂浮在附近(见Wikipedia)。 PHP确实有一些散列函数available都具有不同的优点和缺点。另请参阅php.net上的评论部分。

关于一般Web应用程序的安全性,我建议你看看OWASP project,这是关于使Web应用程序更安全。一个好的开始将是看看Top Ten security vunerabilities(蓝色框中的“前十名”)。

+0

感谢您的评论。非常真实的是,随着科技变得越来越复杂,更好,MD5不再好。 顺便说一句,感谢您提供关于OWASP的提示。这是伟大的系统。 – 2012-02-06 12:46:55

+0

顺便说一句,我发现一个免费的用户管理软件[majordojo](http://www.majordojo.com/php-users/)它不是一个坏的。 – 2012-02-06 13:09:10

1

起初,您应该通过SSL(TSL)将数据发送到服务器,这将进行加密。你也应该为发送给服务器的任何表单使用CSRF保护。

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

当您在数据库中存储密码时,使用种子散列函数,如果任何人能够破解您的数据库并获取散列,他将无法在没有种子的情况下加密它们。

您将通过谷歌找到关于所有技术的许多信息。

+0

@ tbaun89非常感谢您的好评。你是完全正确的,我相信测试执行的好坏非常重要,所以我可以检查它的强弱程度。 – 2012-02-06 12:38:20