gpt4 book ai didi

PHP 7.4 和 MySQL : caching_sha2_password Denying long (20c) passwords

转载 作者:行者123 更新时间:2023-12-02 03:46:20 25 4
gpt4 key购买 nike

更新:

2020年2月23日:该错误已在 PHP 7.4.3 中修复.

2019 年 12 月 23 日:我已发现哪些密码受到影响。请参阅下面我的回答。对于为什么长密码被拒绝的答案仍然非常感激。

<小时/>

免责声明:我已经尝试了大约 2 个小时来设置不同的密码。我绝对确信下面的密码会导致问题。它适用于其他密码。我确实知道如何修复它:使用不同的密码。我想知道为什么它不起作用。因为这种不一致是 Not Acceptable 。

我能够在我的系统上重现该问题。

<小时/>

最近切换到 PHP 7.4 和 MySQL 8,默认情况下使用 caching_sha2_password。之后validating它实际上受 PHP 支持,但我无法让它与我随机生成的密码一起使用,因此我再次使用 PHP 7.3 和 mysql_native_password

现在,我设置了一个新服务器并且它正常工作,因此我尝试找出问题所在,以便我可以在其他服务器上使用 caching_sha2_password

MySQL(通过使用 root 的 mysql shell)

ALTER USER 'test'@'localhost' IDENTIFIED WITH caching_sha2_password BY '';
FLUSH PRIVILEGES;
QUIT

PHP

const DB_HOST = '127.0.0.1';
const DB_USERNAME = 'test';
const DB_PASSWORD = '';
const DB_NAME = 'test_db';
$mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);

测试(重现)

php db.php

错误

PHP Warning: mysqli::__construct(): (HY000/1045): Access denied for user 'test'@'localhost' (using password: YES) in /db.php on line 5

解决方法:有趣的是,由于某些疯狂的原因再次运行此修复程序:

mysql -u test -p
# Enter password
QUIT

重新设置密码会再次出现该问题。

我注意到根据我使用的密码,它失败了。所以我认为这可能是不支持的字符或粘贴问题。

我将原始密码(40 个字符)简化为这个(20 个字符):

此密码破解:l0QDEptp*L6tNo28ey^8

所有较短的组合都可以正常工作:此密码适用于例如:l0QDEptp*L6tNo28ey^ 以及此密码:0QDEptp*L6tNo28ey^8

重要提示:仅在安全环境中测试此公共(public)密码!

如果您能够重现该问题或对此有任何想法(解决方案/可能的原因),请告诉我。

注意:我所有随机生成的密码实际上都会出现此问题,这些密码长度为 40 个字符并包含特殊字符(例如:%^$!)。我猜想一些相对常见的组合会触发这个问题。

图片: Demo MySQL 8 & PHP 7.4 Authentication issue

<小时/>

MySQL 版本: mysql Ver 8.0.18-0ubuntu0.19.10.1,适用于 aarch64 上的 Linux ((Ubuntu))
PHP 版本: PHP 7.4.1 (cli)(构建时间:2019 年 12 月 18 日 14:44:55)( NTS )
PHP 错误报告: Here
MySQL错误报告: Here

最佳答案

使用此脚本自动设置随机长度和内容密码,然后重新连接到mysql服务器。

$mysqli = new mysqli('localhost', 'username', 'initialpassword', 'dbname');
$i=0;
while (true) {
if($i!=0){
$mysqli = new mysqli('localhost', 'username', $pw, 'dbname');
}
$pw = bin2hex(random_bytes(rand(1, 16)));
$successd = $mysqli->query("ALTER USER 'username'@'localhost' IDENTIFIED WITH caching_sha2_password BY '{$pw}'");
echo "times:{$i} pw:{$pw} {$successd}\n";
$i++;
}

在我的环境中,迭代 100 万次后没有发生任何访问拒绝错误。

关于PHP 7.4 和 MySQL : caching_sha2_password Denying long (20c) passwords,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59432704/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com