[英]Is it possible to block a php script from running in a img src tag?
是否有可能阻止php脚本在img src
标签中运行?
我不希望以这种方式在网页上调用http://example.com/page.php中的脚本来执行:
<img src="http://example.com/page.php">
我希望它仅在直接打开页面或用户单击该页面上的链接时才运行,因此阻止引荐来源不是解决方案。
是的,可以使用accept标头来执行此操作,但是个人用户可以绕过保护。 浏览器下载图像时,它会向标头发送期望的数据-例如, Accept: image/png,image/*;q=0.8,*/*;q=0.5
但这当然不能依靠,因为任何用户都可以关闭此标头,并且任何浏览器都可能不会发送此标头 。
在这里,您可以阅读有关http Accept标头兼容性的文章。
另一个有用的标头可以是Referer
标头。 此标头告诉您调用此请求的网站(该网站上的图像,该网站上的CSS或仅来自此网站的链接)。 规则是相同的-大多数用户将发送标头,但有些用户可能将其关闭。
许多人安装了插件来阻止引荐来源标头,以增加他们的隐私。
否。无法阻止PHP脚本在image标签中运行。
但是,运行脚本后,您可以根据标头发送回不同的内容。 因为可以修改标题,所以这不是防止任何事情的可靠方法。
但是,在img
标签中运行脚本应该不是问题。 一旦浏览器发现内容不是图像,它将直接丢弃它并且不执行任何操作(否则它可能会显示某种错误)。
我做了一些测试。 如果将内容类型刷新为text / html(可能还有图像以外的其他内容),则Firefox和IE似乎将停止等待完整的答复。 但是我看不到他们断开了连接。 Chrome浏览器却等待整个页面。
因此,如果浏览器没有断开连接或PHP无法检测到它,则似乎必须渲染整个页面。 而且,您将必须尽早决定所有标头设置。 因此,这是不值得的。
frametest.html
<html>
<head>
<title>Frame test</title>
</head>
<body>
<h1>Frame test</h1>
<p>The following frame is not to be displayed in frames!</p>
<img src="frametest.php"/>
</body>
</html>
frametest.php
<?php
header('Content-Type: text/html');
echo " ";
flush();
sleep(3);
echo " \r\n ";
flush();
$aborted = (connection_aborted() ? 'yes' : 'no');
$status = (connection_status() ? 'yes' : 'no');
$temp = mail('your@email.here', 'Frametest', 'Client Aborted: ' . $aborted . ' Status: ' . $status);
?>
<html>
<head>
<title>test</title>
</head>
<body>
<h1>Test</h1>
<p>Not to be displayed in frames!</p>
<p>Mail ok? <?php echo ($temp ? 'Yes' : 'No'); ?> </p>
</body>
</html>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.