2014-04-28 43 views
2

我遇到一个奇怪的行为与我的webapp到Safari浏览器(FF没有任何问题)。X-XSS-Protection假阳性?

的代码非常简单:

  • 我有一个包含一些复选框的形式。
  • 我点击提交按钮,通过POST发送数据到同一页面,其中一个PHP脚本写入一个cookie
  • 然后,PHP重新加载相同的页面(“Location:index.php”) ;

不幸的是,我得到以下错误的Safari:

“拒绝执行内请求中找到脚本的一个JavaScript脚本源代码”

该页面不发送JavaScript或URL或其他恶意代码。 它只是从表单发布数据。 那么,我怎么能避免这种情况? 任何人都可以解释为什么Safari浏览器告诉我我想执行JavaScript代码? (当然,在页面顶部添加“header(”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)可以正常使用,火狐和Chrome的版本。
  • 将setcookie部分放在页面的顶部并在标题(“location:”)之后立即调用“exit”不能解决问题。
  • 即使我把setCookie方法在一个单独的PHP脚本,并从这个新页面中重新载入页面,我得到了在Safari同样的错误5.

按照要求通过silverlightfox,这里的一些截图2页的HTTP响应头:

headers of the page which set the cookie

headers of the page reloaded

+0

不确定,但你可以命名你的输入'选择[]'?它应该是“选择”吗? – Sablefoste

+0

@Sable当然,他可以,如果他想要一个数组,他一定会。这与问题无关 –

+0

您是否可以将导致错误出现的页面的完整HTTP响应添加到您的答案中? – SilverlightFox

回答

1

设置Location头之后,你应该打个电话到exit

这将阻止对您的页面进行任何更多的处理,并且其余的响应将不会发送到浏览器(即使您不重定向,如果不调用exit,HTML内容仍将被发送。

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

+0

谢谢你的回应,但这不适用于我的情况。请参阅我的编辑:我认为这只是我使用的浏览器的一个错误... – Chrysotribax

+0

@SilverlightFox请注意,重定向响应的Content-Length标题是如何为零的?该回复机构没有发送任何内容。 –