2014-04-28 24 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標題是如何爲零的?該回復機構沒有發送任何內容。 –