对不起,如果这可能是一个愚蠢的问题,我会为我的网站尝试sha + salt。想知道如何随机化我的盐。注册后,所有这些都将被散列到数据库中。还需要我为用户验证删除sha和salt。如果有人指出我正确的检测或一篇好文章会很好。谢谢我也是网站安全人员的新手我还在研究我将用于我的网站的安全实现,这些是我将要做的。
想了解更多应该添加到我的安全性中的内容。我正在将学校管理系统作为一个项目。
到目前为止,我正在调查。反暴力和我的教授给了我一个关于HTTPS的提示。
如果密码是sha + salt加密,我将如何验证登录。
答案 0 :(得分:2)
由于这是一个非常大的问题,我可能更容易引导您使用一些有用的资源,而不是试图自己解释它。
介绍网络加密A List Apart wrote a nice article。它没有非常讨论实现,但提供了一个很好的概述。
有关安全漏洞列表以及如何对抗它们,请参阅OWASP Top Ten Project。
这里是PHP Security的指南,非常全面。
最后,有关创建登录系统的更多信息,请参阅this question。
我建议您搜索Stack Overflow,因为可能会有一些很好的答案。
答案 1 :(得分:1)
作为salt只是将一个随机字符串添加到要编码的字符串的哈希值中,有足够的方法来生成它[例如this on SO]。
您不需要也不能解密任何sha结果,因为sha [如md5]是哈希算法,而不是 crypt 功能,即它不是意味着隐藏任何东西供以后检索:这很重要,因为我不希望我注册的网站的管理员从数据库中读取我的密码。
哈希是将数据集中的元素映射到另一个中的较短元素,在[几乎全部] injective way中 - 将任意长字符串映射到固定长度键:这使您可以在哈希域实际上并不知道原始值。
hash( value1 ) = hash ( value2 ) => value1 = value2
我说几乎因为哈希算法有一些冲突[例如先前声明的例外情况,例如hash(value1) = hash(value2)
并不意味着2个值相同] - 盐也有助于此。
这就是说,这就是你将密码保存到db:
的方法sha1
只是为了示例]; 在代码中:
$user -> salt = your_salt_generator();
$user -> hashedPwd = hash('sha1', $salt . $userChosenPwd);
检查$username
/ $password
的Pwd只是:
$username
的用户; 在代码中:
hash('sha1', $user -> salt . $sentPassword) == $user -> hashedPwd;
关于在URL中隐藏值,它更像是SEO /可读性主题而不是安全性:URL应该在路由时进行[例如http://somesite.com/products/:id
访问id-th产品,并且您的服务器逻辑不应该容易受到对您的网站发出的请求的影响[无论如何完全废弃我现在不能带来的情况]。< / p>
关于MySQL注入,我们从prepared statements开始PDO extension删除它们。
关于这个,有数以百万计的答案,只是环顾四周。
坚持你的工作!
答案 2 :(得分:1)
不是你问题的直接答案,而是研究phpass http://www.openwall.com/phpass/
它将为您处理盐渍,并已经过许多安全专家的审核,被认为是非常好的密码哈希工具