在没有数据库的情况下使用PHP加密密码的最安全方法是什么

时间:2011-02-14 23:50:06

标签: php security authentication passwords cryptography

我正在开发一个应用程序,我不希望任何人找出管理员用户名/密码的算法。

我想首先澄清一下:

  1. 网站安全性是否仅基于算法的复杂性?
  2. 什么是最安全的方法,或者您可以推荐一个GPL源代码链接? (这是不可行的,因为任何可以识别我从哪里获得源代码的人都可以访问算法?)
  3. 使用MySQL作为我的应用程序,我不需要。
  4. 对于我如何在不花钱的情况下获得尽可能安全的建议,您有什么建议?时间是我的奢侈品。只需PHP和最小的JavaScript。

6 个答案:

答案 0 :(得分:5)

您需要的是散列算法(例如md5或sha1),它们是“单向”的,这意味着您可以轻松地散列字符串(如密码),并将生成的散列与存储的散列进行比较。但是,您无法获取哈希值并将其转换回密码。

有关sha1函数,请参阅http://gr.php.net/manual/en/function.sha1.php

MD5和SHA1是众所周知的算法,SHA1更安全,因为有一些当前的机制可以简化MD5哈希的强制执行。

答案 1 :(得分:4)

密码绝不能加密,这明显违反了CWE-257。必须始终对密码进行哈希处理,SHA256是一个非常好的选择。

SHA256非常强大且非常安全,因为它是公开的,并且经过严格审核。私有算法的使用在secuirty中被称为“(in)security though obscurity

答案 2 :(得分:3)

我建议您先阅读这篇文章:http://phpsec.org/articles/2005/password-hashing.html

它告诉您如何使用salt生成安全哈希。如果您阅读整篇文章,您应该能够理解如何在最后改进最终功能。

答案 3 :(得分:3)

我建议使用专门设计用作密码哈希的哈希函数,例如bcrypt,而不是像SHA256这样的标准哈希。这使得在哈希泄漏的情况下破解密码变得更加困难。

答案 4 :(得分:2)

您的问题似乎暗示加密密码可通过网络以某种方式访问​​。

不应该发生这种情况 - 使用.htaccess或等效文件来限制对该文件的访问,或者只是将其存储在文档根目录之外。这样,潜在的攻击者即使知道加密算法,也无法尝试解密。

也就是说,有大量crytpographic hashing algorithms,即使攻击者确实获取了您的密码文件/文本,它也会将您的密码加密到一个极不可能(但并非不可能)的形式。

上面的维基百科文章中有一个nice list,其中包含各种算法以及当前对每种情况下反转加密密码难度的估计。

大多数现代环境已经支持最强大的这些算法。对于PHP:

http://php.net/manual/en/function.sha1.php

http://php.net/manual/en/function.hash.php

第二个提供了多种选择......

编辑:

请记住,如果您选择的密码为johnycash,或者使用暴力字典攻击同样容易猜到的话,即使是最好的哈希算法也无济于事。

很多时候,系统中最薄弱的环节在于使用它的人......

答案 5 :(得分:1)

回复:“网站安全性是否仅基于算法的复杂性?”

不,您需要做很多事情来确保网站安全。

你必须防止的一些事情是:

  • SQL注入
  • 代码注入
  • 目录遍历
  • 跨站点脚本
  • Flash参数注入
  • 会话劫持
  • 密码暴力强制
  • 跨站点请求伪造
  • 中间人

可能还有更多......