Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
I';我使用bcrypt for php,希望潜在的黑客需要很长时间才能登录_Php_Security_Bcrypt - Fatal编程技术网

I';我使用bcrypt for php,希望潜在的黑客需要很长时间才能登录

I';我使用bcrypt for php,希望潜在的黑客需要很长时间才能登录,php,security,bcrypt,Php,Security,Bcrypt,我指的是这个答案: 我们重新对密码进行散列,但是实际上我们没有对散列做任何处理(我们在CheckPassword函数中使用提交后的明文密码进行身份验证)。黑客不能绕过重新散列部分吗 下面是我的伪代码 如果密码/用户名是通过POST提交的,$row['password']是sql中的散列pword $t_hasher = new PasswordHash(13, FALSE); $hash = $t_hasher->HashPassword($_POST['password']); $che

我指的是这个答案:

我们重新对密码进行散列,但是实际上我们没有对散列做任何处理(我们在CheckPassword函数中使用提交后的明文密码进行身份验证)。黑客不能绕过重新散列部分吗

下面是我的伪代码

如果密码/用户名是通过POST提交的,$row['password']是sql中的散列pword

$t_hasher = new PasswordHash(13, FALSE);
$hash = $t_hasher->HashPassword($_POST['password']);
$check = $t_hasher->CheckPassword($_POST['password'], $row['password']);
if($check) Great success else Wrong credentials`

注意:我发现工时系数对运行CheckPassword所需的时间没有影响。这只会增加HashPassword的使用时间。

在我看来,没有一种哈希算法是安全的,但是有一些算法会减慢黑客的速度,我们唯一的希望是他们能用它偷窥一下……

密码有两种类型的攻击:

  • 攻击者可以以某种方式读取存储在数据库中的密码散列(SQL注入或任何其他访问系统的方式)。攻击者现在想要获得原始密码(因为散列密码不会让他走远)
  • 攻击者使用不同的密码(暴力)重复使用您的登录表单
  • 在案例1中,他已经绕过了您的登录表单,他不在乎在您的系统上一次登录需要多少时间。但他关心在他的系统上强行输入密码需要多少时间。因此,通过尝试每种组合并使用与系统相同的算法对密码进行散列,工作因素只会使暴力破解密码变得更加困难。在这种情况下,“重新散列”密码以延长登录过程不会有帮助

    然而,在案例2中,他确实关心在您的系统上尝试密码需要多少时间,因为他必须花很多时间才能进入正确的登录(另外,如果他找不到,他可能必须猜测用户名)。攻击者一定很笨,因为他会留下痕迹并浪费时间。你可以通过在一定次数的登录失败后封锁他的IP,让他的生活更加悲惨。另外,您可以在每次无效登录后添加
    睡眠
    (睡眠不需要CPU密集型哈希操作那么多资源)

    增加成本:

    php中的示例代码: $hash=“你好”

    $hash=password\u hash($password,password\u DEFAULT,数组('cost'=>15))

    echo$hash

    变量转储(密码验证($password,$hash))

    因此,15美元的成本需要花费大量的时间来散列和破解它

    上面的示例显示了哈希过程以及验证哈希以进行身份验证的方法

    “BCRYPT每次运行时都会创建新哈希!!!!”

    将此代码放在.php文件中,然后也运行它检查代码是否正在运行

    别忘了
    <?php?>

    为什么不在每次尝试之后加上几秒钟的睡眠时间呢;如果你的唯一目标是让它变慢。然而,这真的值得吗?你正在保护的东西可能会受到这样的攻击吗?@user557846不,需要的是CPU时间,而不是时钟时间。攻击者可以使用自己的系统攻击已获得的密码哈希,这是必须加以保护的攻击。请记住,一般攻击(不是矛钓)是获取所有用户的用户信息,然后破解简单密码并在黑暗的web上出售用户凭据+密码。使用phpass,功因子与哈希一起存储,因此攻击者不必猜测功因子(原因是,即使phpass配置不同,您也可以验证哈希)。但是,如果您对密码进行散列,使其不会显示功因子,那么您是对的:攻击者必须猜测正确的功因子,以便使散列相等。只想与您核实一下,并向其他人澄清一下:功因子仅在我们最初使用phpass(用于放入数据库的)创建散列时才起作用。如果攻击者获得此哈希,他可以尝试暴力强制执行它
    $t_hasher=new PasswordHash(**tiny work factor**,FALSE);$check=$t_hasher->CheckPassword(暴力强制猜测,从数据库窃取哈希);If($check)巨大的成功还有错误的凭据
    ,但攻击者选择的任何功因数都无关紧要。如果原始功因数真的很高,即使攻击者选择的功因数很低,也需要很长时间time@user1114105:是的,攻击者必须使用您的功因数。因此,无论您选择什么功因数,攻击者都必须使用如果他想要破解散列,则完全相同。如果他选择使用较低的工作因子,他将永远无法从散列中获取正确的密码。例如:您使用因子19散列密码“hello”。然后攻击者尝试使用因子2强制执行您的散列,他将永远无法从中获取“hello”。他可能会获得与“1234”匹配的密码但是他不能使用该密码登录到您的帐户,因为对于您的检查,它只是一个错误的密码。“BCRYPT每次运行时都会创建新哈希!!!!”需要解释,因为它确实有意义。也许您的意思是,每次使用
    密码\u verify
    验证时,哈希都会重新计算。