discuz验证码不显示?

On 2010/09/16, in PHP, by lyndon

这几天用firefox浏览网站是经常发现有的网站验证码不显示,开始以为是firefox不兼容网站的js代码。

后来发现图片返回的内容是Access Denied,也没有在意,还以为是网站的程序有点问题。

无意中发现不能显示验证码的全是discuz的论坛,上官方一看,连官方的验证码都不显示。

心想discuz的兼容性不止这么差吧,ff都不支持?应该不可能,怀疑和referer有关。

打开验证码源程序一看,果然第18行中有个条件

$refererhost['host'] != $_SERVER['HTTP_HOST']

$refererhost['host']就是$_SERVER['HTTP_REFERER']中的地址,和$_SERVER['HTTP_HOST']比较,这么做的目的可能是防止不是从本站读取验证码图片,比如说注册机什么的。

但是这么做的话我觉得毫无意义,因为$_SERVER['HTTP_REFERER']是可以伪造的。而带来的一个后果就是在一些情况下,正常用户 也无法看到验证码,比如,有些防火墙和浏览器是可以过滤掉REFERER的,这样$refererhost['host']永远不会 和$_SERVER['HTTP_HOST']相等,于是就一直看不到验证码。

与其用REFERER不如把验证码搞得复杂点。

Tagged with: