我正在使用cool-captcha登记表格。 这是我在代码中使用的Captcha生成的图片代码:
<img src="captcha.php" id="captcha" />
任何人都可以直接转到“captcha.php”页面查看图片。所以我的问题是,无论如何禁止在浏览器中直接访问或直接查看Captcha.php?我只想要Captcha.php只能用于查看img源内部而不是浏览器直接查看。反正有没有在php或htaccess文件中做?
由于
答案 0 :(得分:1)
没有有效的方法来阻止这种情况,因为有一些解决方案甚至可以在图像中呈现URL。在这种情况下,即使您花费精力来阻止验证码,使用URL的渲染图像(例如在Linux上保存缓冲区xvfb)也足以使用X,Y坐标获取验证码。顺便说一下......使用像https://addons.mozilla.org/en-US/firefox/addon/hackbar/
这样的工具可以绕过诸如验证参考或ajax请求之类的其他解决方案答案 1 :(得分:1)
您当然可以使用.htaccess
与防止图像热链接相同的方式
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC]
RewriteRule ^hellothere/captcha\.php$ - [NC,F,L]
答案 2 :(得分:0)
要停止直接访问任何PHP脚本,在脚本顶部添加此行
if (!defined('BASEPATH')) exit('No direct script access allowed');
允许AJAX请求:
if (!defined('BASEPATH') &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) != 'xmlhttprequest')
exit('No direct acess allowed...');
答案 3 :(得分:0)
据我了解,答案是否定的;至少不是以任何安全的方式。对于服务器,调用该页面的浏览器之间几乎没有任何区别,因为它是src
标记的<img>
,或者只是有人在浏览器中输入了网址。
我也不确定你要避免什么样的问题。有人看到你的验证码没有它周围的页面有什么问题(如果他们真的想...)。
有些想法让人更难以看到它不在形式中:
$secret = md5($salt . strftime("%Y%m%d%H%M"));
),然后检查captcha.php这个秘密是秘密还是最后一分钟的秘密($now = time(); $_REQUEST["secret"] == strftime("%Y%m%d%H%M", $now) || $_REQUEST["secret"] == strftime("%Y%m%d%H%M", $now - 60)
)$SESSION["captcha_ok"] = 1;
,并在captcha.php中执行if (!$SESSION["captcha_ok"]) {show_error();} else {$SESSION["captcha_ok"]=0; etc....
但是再一次,这些方法实际上都没有真正阻止那些真正想要的人在没有表格的情况下查看你的验证码。
答案 4 :(得分:0)
<html>
<head>
</head>
<body>
<?php
session_start();
$no=rand(0,567890);
$_SESSION['imgno']=$no;
?>
<img src="load.php?sc=<?php echo $no; ?>" width="300px" height="300px" />
</body>
</html>
<强> load.php 强>
<?php
session_start();
header('Content-Type: image/jpeg');
if(isset($_SESSION['imgno']))
{
readfile("student1.jpg");
unset($_SESSION['imgno']);
}
else
{
readfile("thumbs.gif");
}
?>