2010-10-26 39 views
5

昨天我對問題的響應有關POST數據發送到同一頁面與Post-Redirect-Get pattern這樣的:PHP安全性:發送POST到相同的URL =壞?

if (isset($_POST['Submit'])) { 
    // prevent resending data 
    header("Location: " . $_SERVER['PHP_SELF']); 
} 

有人回答說:sending data to same PHP page from Javascript, no AJAX or forms

這是網絡的目的極爲重要POST不能通過簡單的URL發送。

現在我想知道這有什麼問題嗎?我想避免使用帶有確認消息的單獨頁面,因爲它只是打破了用戶體驗,並且從設計POV來看它是一個不可行的過程。

+1

我不確定我是否理解這個人說什麼時,他們說重要的是POST不會通過「簡單」URL發送。 – 2010-10-26 09:17:22

+0

這裏是鏈接:http://stackoverflow.com/questions/4016968/sending-data-to-same-php-page-from-javascript-no-ajax-or-forms人有26K的聲望。 – FFish 2010-10-26 09:26:03

+0

SO上的聲望並不意味着所有*表示* ...(本文寫作25K);) – deceze 2010-10-26 09:31:00

回答

6

它爲 目的網絡安全的一個POST 無法通過簡單的URL發送極爲重要。

我想這個人可能會誤解你或者網絡安全。

沒有什麼錯誤使用相同的網址不同請求方法(GETPOSTPUTDELETEHEAD等)。事實上,這是一個非常好的主意。

+0

我添加了鏈接 – FFish 2010-10-26 09:29:42

+4

+1 ...實際上,RESTfulness應該如何工作。 – deceze 2010-10-26 09:32:02

0

這似乎是回報者沒有想到他的迴應通過。我想他會認爲使用$ _SERVER [「PHP_SELF」]會有一些安全問題,但在這種情況下我看不到。

如前所述,讓相同的URL處理不同的請求沒有任何問題。

這就是說,我仍然將表單中的確認信息分開。我看不出爲什麼我不應該這樣做。驗證和錯誤消息仍然可以在表單視圖中發生,但只是讓很多條件決定你是否應該顯示確認消息,表單或錯誤消息看起來像(IMO)你的代碼很亂。

1

爲了網絡安全的目的,POST不能通過簡單的URL發送是非常重要的。

我寧可解釋這句話,即不可能在同一個URL上的GET請求不會導致POST請求相同。因此,檢查$_REQUEST['submit']而不是隱式檢查$_POST['submit']$_SERVER['REQUEST_METHOD']可能是違規行爲。

也許作者也意味着表單使用一些一次性身份驗證令牌,以便只允許驗證的請求。