X-XSS-Protection假阳性?

时间:2014-04-28 18:06:29

标签: php security xss

我遇到了一个奇怪的行为,我的webapp进入了safari(FF完全没问题)。

代码非常简单:

  • 我有一个包含一些复选框的表单。
  • 我点击提交按钮,该按钮通过POST将数据发送到同一页面,其中PHP脚本写入cookie
  • 然后,PHP重新加载带有标题的同一页面("位置:index.php");

不幸的是,我在Safari中遇到以下错误:

"拒绝执行JavaScript脚本。请求中找到的脚本源代码。"

该页面不发送javascript或URL或其他恶意代码。 它只是从表单POST数据。 那么,我怎么能避免这种情况呢? 谁能解释为什么safari告诉我我想执行javascript代码? (当然,在页面顶部添加"标题(" X-XSS-Protection:0");"可以解决问题。但我对此并不满意这种对策......)

这是代码的一些相关部分(简化):

<?php
if(@$_POST["foo"] == "yes"){
    $choice = join("-", $_POST["choice"]);
    setcookie("bar",$choice, time()+900000);
    header("Location:index.php");
    }
?>


<form method="post" action="index.php">
<input type="hidden" name="foo" value="yes">
<p><input type='checkbox' name='choice[]' value='foo'> foo</p>
<p><input type='checkbox' name='choice[]' value='bar'> bar</p>
<p><input type='checkbox' name='choice[]' value='baz'> baz</p>
<input type="submit">
</form>

提前感谢您的回复!

编辑:

  • 我强烈怀疑我最喜欢的Safari版本中存在一个错误(5)因为代码在safari 6(ML),firefox和chrome中完美运行。
  • 将setcookie部分放在页面顶部并调用&#34;退出&#34;标题后面(&#34;位置:&#34;)没有解决问题。
  • 即使我把setcookie放在一个单独的PHP脚本中并从这个新页面重新加载页面,我在safari 5中也遇到了同样的错误。

根据silverlightfox的要求,以下是2页的http响应标题的一些截图:

headers of the page which set the cookie

headers of the page reloaded

1 个答案:

答案 0 :(得分:1)

设置Location标题后,您应该拨打exit

这样可以防止对您的网页进行更多处理,并且其他响应将不会发送到浏览器(即使您在不调用exit时重定向,仍会发送HTML内容)。

我的猜测是页面中某处有未编码参数的输出(在您的问题的代码段中没有)。在发送重定向标头后,查看页面输出以查看HTML内容是否无意中在HTTP响应正文中生成任何JavaScript代码。