2013-02-13 32 views
0

我正在處理從一個域到另一個域的表單POSTING值(例如:www.something1.comwww.something2.com)。是否有可能從PHP中發佈的值中獲取URL值?

如何驗證請求是從www.something1.com發佈的?或者別的地方。

  • 是否可以獲取傳入的請求URL?
  • 有沒有其他驗證方法?
+4

[HTTP_REFERER](http://php.net/manual/en/reserved.variables.server.php) – Peon 2013-02-13 07:06:26

+2

簡短的回答,你不能。閱讀[服務器變量](http://php.net/manual/en/reserved.variables.server.php)。如果你看到'HTTP_REFERER'的部分,那將是唯一真正的方法,但惡意用戶可以改變它。 – Jon 2013-02-13 07:08:29

+0

@Jon你能解釋一下惡意用戶的變化嗎? – Anudeep 2013-02-13 07:18:06

回答

1

把我的意見在回答的形式,因爲我不相信任何電流答案解決您的主要問題。您希望驗證表單在提交到其他域時出現的源域。

簡短的回答是沒有,你不能驗證它(至少出於安全原因)。可用的選項,這將使你的第一個域是$_SERVER['HTTP_REFERER'],然而,根據PHP Manual

的頁面(如果有的話),其中提到的用戶代理到當前頁面的地址。這由用戶代理設置。並非所有的用戶代理都會設置它,有些提供了將HTTP_REFERER修改爲功能的功能。總之,它不能真正被信任。

的問題在於形式由客戶端提交,惡意用戶發送到「服務器2」的所有數據/將被修改的事實,避開你可能在任何安全/驗證地點。唯一的另一種選擇是將一些需要提交的表單進行驗證,但要使這個表單接近有效的唯一方法是改變它,並且經常改變它。 (也許每分鐘?)。但是不管您添加的內容是否需要提交 - 惡意用戶都可以完全控制發送的所有內容。

3

檢查值$_SERVER['HTTP_REFERER']。某些瀏覽器可能會隱藏或欺騙此標頭,但大多數瀏覽器會正確發送它。

但請記住,沒有辦法保證正確的轉診,這很容易造假。

0

您可以通過URL作爲參數「http://site.com/page2.php?prevUrl=」.urlencode(「http://site.com/page1.php」)。

希望這有助於

+1

將它作爲一個參數傳遞給惡意用戶,與'http_referer'一樣沒用,因爲任何試圖從不同源提交表單的人都可以添加它。 – Jon 2013-02-13 07:20:39

相關問題