检测(并阻止)隐藏在图像中的GET请求

时间:2012-03-25 14:55:49

标签: php

前一段时间我注意到有些人在我的论坛上发布了“图片”,当他们被登录用户查看时,强迫他们在他们可能不想要的网站上执行操作。有问题的操作通常通过对相关页面的简单GET请求来执行。

这已经通过要求所有非平凡的更改成为POST请求进行修补,但我对此感到疑惑:

是否有可能检测到浏览器何时出现图像,并阻止PHP脚本运行?如果有的话?

我最初的尝试是:

<?php
    if( isset($_SERVER['HTTP_ACCEPT']) && $_SERVER['HTTP_ACCEPT'] != ""
     && stripos($_SERVER['HTTP_ACCEPT'],"image/")) die("Insert error message here");
?>

然而,虽然它在IE和Firefox中完美运行,但谷歌Chrome(由于某种原因)包含“image / png”作为其Accept标头的一部分,导致用户无法加载任何“受保护”的页面。 / p>

很明显,这个想法在理论上有效,但在实践中它是不可靠的。有可靠的方法吗?

2 个答案:

答案 0 :(得分:1)

  

通过要求所有非平凡的更改成为POST请求

来修补此问题

好。 HTTP规范声明GET请求不应导致非平凡的更改。

  

是否有可能检测到浏览器何时出现图像,并阻止PHP脚本运行?如果有的话?

没有。您只需要阻止人们向您的站点添加触发POST请求的内容。

要阻止人们向其他网站添加内容,导致浏览器自动向您的网站发送POST请求,请实施CSRF protection

答案 1 :(得分:0)

据我了解您的问题,您希望保护自己免受CSRF的侵害。在wikipedia,您会找到一些想法。

如果你想保护自己免受CSRF的影响,你建议的方式似乎没有用......根据我的意见。