我在PHP的“crypt()”中找到了一个错误?

开发技术 作者: 2024-08-19 14:25:01
我想我可能在 Windows的 PHP的crypt()函数中发现了一个错误. 但是,我认识到这可能是我的错. PHP被数以百万计使用,成千上万的工作;我的代码被我使用了几十个. (这个说法最好是explained on Coding Horror) 所以我要求帮助:告诉我我的错我一直在试图找到它几天,没有运气. 设置 我正在使用Windows 2.2.14(Win32)和PHP 5.3.2的Win
我想我可能在 Windows的 PHP的crypt()函数中发现了一个错误.

但是,我认识到这可能是我的错. PHP被数以百万计使用,成千上万的工作;我的代码被我使用了几十个. (这个说法最好是explained on Coding Horror)

所以我要求帮助:告诉我我的错我一直在试图找到它几天,没有运气.

设置

我正在使用Windows 2.2.14(Win32)和PHP 5.3.2的Windows服务器安装.我的开发框运行Windows XP Professional; “生产”服务器(这是一个内部网设置)运行Windows Storage Server 2003.这两个问题都发生.

我没有看到任何与PHP.ini相关的crypt(),但会很高兴地回答有关我的配置的问题.

问题

我的程序中的几个脚本偶尔挂起:页面坐在那里等待本地主机,从不完成.这些脚本中的每一个使用crypt将用户的密码哈希,然后将其存储在数据库中,或者在登录页面的情况下,将输入的密码进行哈希,然后将其与存储在数据库中的版本进行比较.

由于登录页面最简单,所以我专注于测试.我反复登录,发现它可能会挂起10次.

作为实验,我更改登录页面以使用纯文本密码,并将数据库中的密码更改为纯文本版本.页面停止挂起.

我看到PHP的最新版本列出了这个bug修复:

Fixed bug #51059 (crypt crashes when
invalid salt are [sic] given).

所以我创建了一个非常简单的测试脚本,如下,使用与an official example中给出的相同的盐:

$foo = crypt('rasmuslerdorf','r1');
echo $foo;

这个页面也会挂起来,如果我重新加载它像疯了.我只看到它挂在Chrome上,但无论浏览器如何,对Apache的影响是一样的.

对Apache的影响

当这些页面挂起时,Apache的server-status page(我解释了here,有关不同的问题)增加了正在处理的请求数量,并减少了空闲工作人员的数量.正在处理的请求几乎都有“发送回复”的状态,虽然有时候他们会显示“阅读请求”或“保持活动(读取)”.

最终,Apache可能会崩溃.如果是这样,Windows崩溃报告如下所示:

szAppName: httpd.exe
szAppVer: 2.2.14.0
szModName: PHP5ts.dll
szModVer: 5.3.1.0 // OK,this report was before I upgraded to PHP 5.3.2,// but that didn't fix it
offset: 00a2615

这是我的错吗

我试图向PHP提交一个错误报告.反对它的论点是,如上所述,错误几乎总是我的错.

但是,我赞成“这是PHP的错误”的论点是:

>我正在使用Windows,而大多数服务器使用Linux(我不会选择这个),所以机会更大,我发现了一个边缘案例
>最近有一个crypt()的bug,所以也许还有问题
>我做了最简单的测试用例,我还有问题

有人可以复制吗你能建议我出错了吗?我应该提交bug?

提前感谢您提供的任何帮助.

在这个问题上,错误51059(仅关于传递无效输入)或50947(不同的代码,5.3具有在PHP中实现的所有平台上的新算法和功能)与此不相关.

不过http://bugs.php.net/bug.php?id=51424是.我已经在那里贴了一些部分补丁,但是它解决了大部分可能的锁,但这确实是不够的.在下一个5.3版本中将会有一个完整的修复.

顺便说一下,它不是Windows特定的,而是关于线程SAPI(例如,Windows apache 2.2).

原创声明
本站部分文章基于互联网的整理,我们会把真正“有用/优质”的文章整理提供给各位开发者。本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
本文链接:http://www.jiecseo.com/news/show_64984.html
php crypt 找到了 一个 错误