我遇到一個奇怪的行爲與我的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響應頭:
不確定,但你可以命名你的輸入'選擇[]'?它應該是「選擇」嗎? – Sablefoste
@Sable當然,他可以,如果他想要一個數組,他一定會。這與問題無關 –
您是否可以將導致錯誤出現的頁面的完整HTTP響應添加到您的答案中? – SilverlightFox