c/c++语言开发共享PHP的password_verify()是否可以安全地防止超长密码(DoS攻击)?

一般攻击情形:

在2013年,Django有一个普遍的漏洞,因为攻击者可以通过非常大的密码创建极其强大的CPU计算[ 请参阅此处的安全声明 ]。 我不确定在使用PHP的password_verify()和其他密码散列方法时是否仍然可以进行此操作而无需进一步检查。

PHP文档说:

对algo参数使用PASSWORD_BCRYPT将导致密码参数被截断为最大长度为72个字符。

但是,PHP的代码MAYBE说了一些不同的东西:

然而,PHP 5.5.0的password_verify()函数背后的C代码并不直接限制传递的参数(可能在bcrypt算法的更深层次上?)。 此外, PHP实现不限制参数。

问题是:

password_verify() (以及相同function集的其他function)是否通过最大化POST参数容易受到DoS的攻击? 还请考虑POST上载大小远大于4MB的站点范围配置情况。

    密码算法内部密码限制为72个字符。

    要了解原因,让我们看一下crypt()的源代码: ext / standard / crypt.c

      } else if ( salt[0] == '$' && salt[1] == '2' && salt[3] == '$') { char output[PHP_MAX_SALT_LEN + 1]; memset(output, 0, PHP_MAX_SALT_LEN + 1); crypt_res = php_crypt_blowfish_rn(password, salt, output, sizeof(output)); if (!crypt_res) { ZEND_SECURE_ZERO(output, PHP_MAX_SALT_LEN + 1); return NULL; } else { result = zend_string_init(output, strlen(output), 0); ZEND_SECURE_ZERO(output, PHP_MAX_SALT_LEN + 1); return result; } 

    password字段是一个简单的char*字段。 所以没有长度信息。 所有传递的都是普通指针。

    因此,如果我们遵循这一点,我们最终将降落在BF_set_key

    循环的重要部分:

     for (i = 0; i < BF_N + 2; i++) { tmp[0] = tmp[1] = 0; for (j = 0; j < 4; j++) { tmp[0] <<= 8; tmp[0] |= (unsigned char)*ptr; /* correct */ tmp[1] <<= 8; tmp[1] |= (BF_word_signed)(signed char)*ptr; /* bug */ if (j) sign |= tmp[1] & 0x80; if (!*ptr) ptr = key; else ptr++; } diff |= tmp[0] ^ tmp[1]; /* Non-zero on any differences */ expanded[i] = tmp[bug]; initial[i] = BF_init_state.P[i] ^ tmp[bug]; } 

    BF_N定义为16.因此外环将循环18次( BF_N + 2 )。

    内循环将循环4次。 4 * 18 == 72。

    而且你有它,只能读取72个字符的密钥。 不再。

    注意

    现在,这个算法有一个有趣的副作用。 因为它使用C-Strings(以空字节终止的字符串),所以它不可能使用超过任何东西。 因此,包含空字节的密码将丢失任何熵。 示例:http: //3v4l.org/Y6onV

    需要了解更多c/c++开发分享PHP的password_verify()是否可以安全地防止超长密码(DoS攻击)?,也可以关注C/ C++技术分享栏目---计算机技术网(www.ctvol.com)!

      以上就是c/c++开发分享PHP的password_verify()是否可以安全地防止超长密码(DoS攻击)?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/980117.html

      (0)
      上一篇 2021年12月13日
      下一篇 2021年12月13日

      精彩推荐