我正在處理從一個域到另一個域的表單POSTING值(例如:www.something1.com
到www.something2.com
)。是否有可能從PHP中發佈的值中獲取URL值?
如何驗證請求是從www.something1.com
發佈的?或者別的地方。
- 是否可以獲取傳入的請求URL?
- 有沒有其他驗證方法?
我正在處理從一個域到另一個域的表單POSTING值(例如:www.something1.com
到www.something2.com
)。是否有可能從PHP中發佈的值中獲取URL值?
如何驗證請求是從www.something1.com
發佈的?或者別的地方。
把我的意見在回答的形式,因爲我不相信任何電流答案解決您的主要問題。您希望驗證表單在提交到其他域時出現的源域。
簡短的回答是沒有,你不能驗證它(至少出於安全原因)。可用的選項,這將使你的第一個域是$_SERVER['HTTP_REFERER']
,然而,根據PHP Manual:
的頁面(如果有的話),其中提到的用戶代理到當前頁面的地址。這由用戶代理設置。並非所有的用戶代理都會設置它,有些提供了將HTTP_REFERER修改爲功能的功能。總之,它不能真正被信任。
的問題在於形式由客戶端提交,惡意用戶發送到「服務器2」的所有數據/將被修改的事實,避開你可能在任何安全/驗證地點。唯一的另一種選擇是將一些需要提交的表單進行驗證,但要使這個表單接近有效的唯一方法是改變它,並且經常改變它。 (也許每分鐘?)。但是不管您添加的內容是否需要提交 - 惡意用戶都可以完全控制發送的所有內容。
檢查值$_SERVER['HTTP_REFERER']
。某些瀏覽器可能會隱藏或欺騙此標頭,但大多數瀏覽器會正確發送它。
但請記住,沒有辦法保證正確的轉診,這很容易造假。
您可以通過URL作爲參數「http://site.com/page2.php?prevUrl=」.urlencode(「http://site.com/page1.php」)。
希望這有助於
將它作爲一個參數傳遞給惡意用戶,與'http_referer'一樣沒用,因爲任何試圖從不同源提交表單的人都可以添加它。 – Jon 2013-02-13 07:20:39
[HTTP_REFERER](http://php.net/manual/en/reserved.variables.server.php) – Peon 2013-02-13 07:06:26
簡短的回答,你不能。閱讀[服務器變量](http://php.net/manual/en/reserved.variables.server.php)。如果你看到'HTTP_REFERER'的部分,那將是唯一真正的方法,但惡意用戶可以改變它。 – Jon 2013-02-13 07:08:29
@Jon你能解釋一下惡意用戶的變化嗎? – Anudeep 2013-02-13 07:18:06