0

您好,抱歉,如果这可能是一个愚蠢的问题,我将为我的网站尝试 sha+salt。想知道如何随机化我的盐。注册后,它们都将被散列到数据库中。我还需要对 sha 和 salt 进行解密以进行用户验证。如果有人指出我正确的检测或一篇好文章会很好。谢谢 另外,我对网站上的安全性内容不熟悉,我仍在研究我将为我的网站使用哪些安全性实现,目前这些是我将要做的。

  1. 密码散列
  2. 反 SQL 注入
  3. 在 URL 中隐藏值

想知道更多我应该为我的安全添加什么。我正在将学校管理系统作为一个项目。

到目前为止,我正在调查。Anti-bruteforce 和我的教授给了我关于 HTTPS 的提示。

另外,如果密码是 sha+salt 加密的,我将如何验证登录。

4

3 回答 3

2

由于这是一个相当大的问题,我可能更容易将您引导到一些有用的资源,而不是尝试自己解释它。

对于网络密码学的介绍,A List Apart写了一篇不错的文章。它没有太多讨论实现,但提供了一个很好的概述。

有关安全漏洞的列表以及如何对抗它们,请参阅OWASP 十大项目

这是一个非常全面的PHP 安全指南。

最后,有关创建登录系统的更多信息,请参阅此问题。

我建议您搜索 Stack Overflow,因为您可能遇到的问题可能有一些很好的答案。

于 2012-08-26T12:35:13.827 回答
1

作为盐只是一个随机字符串添加到您要编码的字符串的哈希值,有足够的方法来生成它[例如this on SO ]。

您不需要也无法解密任何 sha 结果,因为 sha [like md5] 是一种散列算法,而不是crypt函数,即它并不意味着隐藏任何内容以供以后检索:这很重要,因为我不想要我注册的网站的管理员可以从数据库中读取我的密码。

散列是将一个数据集中的元素映射到另一个数据集中的较短元素,以一种 [几乎完全] 单射的方式- 您将任意长字符串映射到固定长度的键:这使您可以在散列域中进行比较,而无需实际知道原值。

hash( value1 ) = hash ( value2 ) => value1 = value2

我说几乎是因为散列算法有一些冲突[例如,先前声明的例外,例如hash(value1) = hash(value2)并不意味着 2 个值相同] - 盐在这方面也有帮助。

这就是说,这是您将密码保存到 db 的方式:

  • 生成盐;
  • 盐添加到实际密码中:将其放在密码之前以防止字典攻击很重要;
  • 用适当的算法对连接的字符串进行哈希sha1处理[我只是为了举例而选择的];
  • 将字符串和盐都保存到数据库中。

在代码中:

$user -> salt = your_salt_generator();
$user -> hashedPwd = hash('sha1', $salt . $userChosenPwd);

Pwd 检查$username/$password只是:

  • $username从数据库中获取用户;
  • 如果存在,请使用上面保存的盐和给定密码的过程,并检查它是否等于存储的哈希。

在代码中:

hash('sha1', $user -> salt . $sentPassword) == $user -> hashedPwd;

关于在 URL 中隐藏值,它更像是一个 SEO / 可读性主题而不是安全主题:应该在路由时创建 URL [例如http://somesite.com/products/:id访问第 id 产品],并且您的服务器逻辑不应该容易受到放入请求中的内容的影响制作到您的网站[不管我现在无法提供的完全废话]。


关于 MySQL 注入,我们摆脱了它们,因为PDO扩展的预处理语句

SO周围有数百万个关于这个的答案,看看周围。

跟上您的工作!

于 2012-08-26T12:41:37.073 回答
1

不是真正直接回答您的问题,而是查看 phpass http://www.openwall.com/phpass/

它将为您处理加盐,并且已经被许多安全专家审查并被认为是非常好的密码哈希工具

于 2012-08-26T12:42:47.397 回答