PHP验证码-文本不显示,但显示特定Web浏览器的背景

PHP验证码-文本不显示,但显示特定Web浏览器的背景,php,captcha,Php,Captcha,我遇到PHP验证码并没有向某些web浏览器显示文本 我用Firefox和IE在我的桌面上试用过,它可以正常工作。当我像其他方桌面或移动设备一样尝试时,它没有显示验证码中的文本 起初,我认为原因是cPanel中不存在字体,导致字体无法显示。因此,我上传了两种不同的字体并尝试 arial.ttf NotoSans.ttf 但同样的问题也发生了 这就是我的代码和文件管理器的样子。如果您需要更多详细信息,请告诉我 session_start(); $captcha_answer = $_SESSIO

我遇到PHP验证码并没有向某些web浏览器显示文本

我用Firefox和IE在我的桌面上试用过,它可以正常工作。当我像其他方桌面或移动设备一样尝试时,它没有显示验证码中的文本

起初,我认为原因是cPanel中不存在字体,导致字体无法显示。因此,我上传了两种不同的字体并尝试

  • arial.ttf
  • NotoSans.ttf
但同样的问题也发生了

这就是我的代码和文件管理器的样子。如果您需要更多详细信息,请告诉我

session_start();
$captcha_answer = $_SESSION['captcha_answer'];
$handle = ImageCreate (100, 40) or die ("Cannot Create image"); 
$bg_color = ImageColorAllocate ($handle, 176, 26, 72); //green
$font_color = ImageColorAllocate ($handle, 255, 255, 255);
$font = 'NotoSans.ttf';

imagettftext($handle, 20, 0, 10, 20, $bg_color, $font, $captcha_answer);
imagettftext($handle, 20, 7, 13, 32, $font_color, $font, $captcha_answer);

ImagePng($handle);

找到更新解决方案 这是因为HTTP>HTTPS问题

除了传输层安全性如何工作的技术方面外,安全交换数据的另一个方面在于我们如何应用这种安全性。例如,如果我们允许用户通过HTTP提交应用程序的登录表单数据,那么我们必须接受MitM完全能够拦截该数据并记录用户的登录数据以供将来使用。如果我们允许通过HTTPS加载的页面依次加载非HTTPS资源,那么我们必须接受这样一个事实,即MitM有一个工具,可以通过该工具注入跨站点脚本攻击,从而将用户的浏览器变成一个预编程的武器,通过浏览器的HTTPS连接进行传输


来源:请尝试为png图像设置正确的标题:

session_start();
$captcha_answer = $_SESSION['captcha_answer'];
$handle = ImageCreate (100, 40) or die ("Cannot Create image"); 
$bg_color = ImageColorAllocate ($handle, 176, 26, 72); //green
$font_color = ImageColorAllocate ($handle, 255, 255, 255);
$font = 'NotoSans.ttf';

imagettftext($handle, 20, 0, 10, 20, $bg_color, $font, $captcha_answer);
imagettftext($handle, 20, 7, 13, 32, $font_color, $font, $captcha_answer);

header('Content-Type: image/png');
ImagePng($handle); 

此外,我建议设置标题,以便浏览器不会缓存图像,以防图像始终是动态生成的。请参阅有关如何实现此目标的答案。

验证码答案中是否有任何值??回显它,看看它是否有价值。@凯恩:你想提供更多关于解决方案的细节吗?你提到了问题的原因,但你没有说你做了什么来解决它。出于好奇,我很想知道你做了什么,但我想这对将来有同样问题的人也很有用。@Master_ex,如果链接被替换,基本上不会加载captcha.php。我发现http://[www.example.com/出于安全目的可能会阻止它。我编辑了答案。请快速阅读。如果我错了,请纠正我。@ShaileshKatarmal,是的,我可以回显$captcha\u答案。但到目前为止它不是$captcha\u答案,我认为这是因为协议问题。
@session_start();
$_SESSION['captcha_answer'] = "hello";
$captcha_answer = $_SESSION['captcha_answer'];
$handle = ImageCreate (100, 40) or die ("Cannot Create image"); 
$bg_color = ImageColorAllocate ($handle, 176, 26, 72); //green
$font_color = ImageColorAllocate ($handle, 255, 255, 255);
$font = 'font/monofont.ttf';  // your font path goes here....

header('Content-Type: image/png');
imagettftext($handle, 20, 0, 10, 20, $bg_color, $font, $captcha_answer);
imagettftext($handle, 20, 7, 13, 32, $font_color, $font, $captcha_answer);

ImagePng($handle);