在工作中,我们有两种相互竞争的盐理论.我工作的产品使用类似用户名或电话号码来加密哈希值.基本上每个用户都有不同的东西,但我们可以随时使用.另一个产品为每个用户随机生成一个salt,并在每次用户更改密码时更改.然后在数据库中加密盐.
My question is if the second approach is really necessary? I can understand from a purely theoretical perspective that it is more secure than the first approach, but what about from a practicality point of view. Right now to authenticate a user, the salt must be unencrypted and applied to the login information.
在考虑之后,我只是没有从这种方法中看到真正的安全性收益.将盐从帐户更改为帐户,即使攻击者知道如何快速确定每个帐户的内容,仍然会使某人尝试强制执行散列算法变得非常困难.这是基于密码足够强的假设.(显然,找到一组密码的正确哈希值,它们都是两位数,比找到8位密码的正确哈希值要容易得多).我的逻辑是不正确的,还是我缺少的东西?
编辑:好的,所以这就是为什么我认为加密盐真的没有意义.(lemme知道我是否在正确的轨道上).
对于以下说明,我们假设密码总是8个字符,盐是5,所有密码都由小写字母组成(它只是使数学更容易).
Having a different salt for each entry means that I can't use the same rainbow table (actually technically I could if I …
在Linux系统中,使用MD5哈希存储密码.为什么"盐"的使用可以更多地保护系统?特别是,我想说明以下两点
/etc/shadow
.例如,用户A具有用户salt s1并生成h1; h1 = md5(password.s1);
.下一次,它使用salt s2,系统必须生成不同的哈希值h2 = md5(password.s2)
.由于h1不等于h2,系统如何验证用户?
当我编辑用户的帖子时,我使用以下网址:
../post/edit/3 //If the id of the post is 3 for example
Run Code Online (Sandbox Code Playgroud)
例如/post/edit/5
,为避免用户故意修改网址,我使用以下逻辑确保用户在没有权限时不编辑帖子:
if (//user is allowed to edit post){
//edit post
}
else {
throw new AccessDeniedException('You do not have the permission to edit this post');
}
Run Code Online (Sandbox Code Playgroud)
这是编辑帖子时使用的一般方法吗?有没有办法做一些更干净的东西,以便用户不能使用网址中的帖子的ID?
我越是想到它,我就越发现我从未在一个关注安全性的网站上看到过像这样的网址中的id.所以,我同意我们仍然可以使用id并检查用户是否可以显示/看到此ID,但用户仍然可以做太多.散列id不是更好,允许我们使用任何可用的算法生成新的加密ID:
<?php
echo hash('md5', 'id_to_edit');
?>
Run Code Online (Sandbox Code Playgroud)
在URL中保护id的标准方法是什么?一般来说,在网址中显示id这样的信息是个好主意吗?