【发布时间】:2014-04-28 18:06:28
【问题描述】:
我的 webapp 在进入 safari 时遇到了一个奇怪的行为(FF 完全没有问题)。
代码很简单:
- 我有一个包含一些复选框的表单。
- 我点击提交按钮,通过 POST 将数据发送到同一页面,其中 PHP 脚本写入了一个 cookie
- 然后,PHP 重新加载带有 header("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)、firefox 和 chrome 中运行良好。
- 将 setcookie 部分放在页面顶部并在 header("location:") 之后立即调用“exit”并不能解决问题。
- 即使我将 setcookie 放在单独的 PHP 脚本中并从这个新页面中重新加载页面,我在 safari 5 中也遇到了同样的错误。
应silverlightfox的要求,以下是2个页面的http响应头截图:
【问题讨论】:
-
不确定,但你能将你的输入命名为
choice[]吗?应该只是choice吗? -
@Sable 他当然可以,而且如果他想要一个数组就必须这样做。这与问题无关
-
您能否将导致错误出现的页面的完整 HTTP 响应添加到您的答案中?
-
请查看我对 HTTP 响应屏幕截图的修改。
-
我怀疑此警告来自名称
name='choice[]'中的方括号,您可以尝试不使用这样的方括号吗:name='choice'?