2012-02-18 49 views
0

我想實現一個系統,我想知道從哪裏POST請求凸輪。我想實現一個頁面中的方法,我想知道在哪裏POST請求凸輪從

例如:我有一個帶有提交按鈕的表單。當用戶點擊提交按鈕時,它會進入頁面。但我想知道發佈請求的來源。

這是代碼至今:

<form action="profile.php?id=<?php echo $user->id; ?>" method="post" name="formAdd"><input name="btnAddUser" type="submit" value="Add User"></form> 

我應該使用隱藏的輸入元素?這會是一個好方法還是別的什麼?

+0

IMO,一個包含'$ _SERVER [「REQUEST_URI」]變量的隱藏元素是一個很好的解決方案。 – satoshi 2012-02-18 11:40:54

+0

您使用:method =「post」但profile.php?id = ...是GET請求的一種形式。我不確定它是否有效 - 檢查有趣! – alfasin 2012-02-18 11:43:27

+0

@alfasin - 實際上,我希望它在提交後重定向到同一用戶的頁面。你可以建議任何其他方式? – maxxon15 2012-02-18 11:53:45

回答

3

首先,有沒有可靠的方法 - 用戶可以請求篡改,如果他們想。

除此之外,還有兩種方法可以得到你想要的信息種類:

  1. 引用者,可通過$_SERVER['HTTP_REFERER']:它包含了從該請求來完整的URL,但有些人使用擴展/防火牆/等。該塊甚至是欺騙查閱者
  2. 正如你所建議的那樣,一個隱藏的表單元素。除非用戶主動想要篡改發送的數據,否則這樣做總是有效的。所以這是首選方式。
1

這真的取決於你如何安全可靠的需要它。雖然這意味着您需要將其添加到指向您的處理腳本的每個表單,但隱藏的表單字段仍然有效。假如有人想要,也很容易造假。或者,您可以使用$ _SERVER ['HTTP_REFERER']。這並不總是可靠 - 我相信這取決於您使用的瀏覽器,但在大多數簡單場景中應該足夠好。另一種選擇是在會話中存儲某些內容並使用它。這可能是最安全的,因爲它全部是服務器端,不能被篡改,但它可能是最難實現的(不是它是火箭科學)。

+0

這是一個好主意。 我如何有一個像'$ this_page = profile.php'這樣的變量可以在其他頁面描述頁面名稱。我可以在我的代碼中使用它來代替** profile.php **。這會是一個好方法嗎? – maxxon15 2012-02-18 12:02:59

+0

@ maxxon15我不太確定您的建議解決方案是如何工作的。也許用一些示例代碼更新您的原始問題? – liquorvicar 2012-02-18 12:50:29

+0

我想說的是: '

id;?>」method =「post」name =「formAdd 「>
' – maxxon15 2012-02-18 13:26:55

0

您可以將頁面保存在會話變量($ _SESSION [「something」] =「page.php」)中,這是最安全的方式,我認爲,因爲表單中的隱藏輸入可以被更改用戶和$ _SERVER ['HTTP_REFERER']並不總是可用的。

+0

我在這個答案上發佈的方法如何? http://stackoverflow.com/a/9340839/432720 – maxxon15 2012-02-18 12:16:34

+0

@ maxxon15,你的方法有效,但我認爲用GET傳遞用戶ID並不安全,因爲用戶可以很容易地將其更改爲另一個用戶的代碼。 – 2012-02-18 16:30:06

+0

它的** GET **請求? :O但是當我通過$ _SERVER ['REQUEST_METHOD']檢查它時,它說它是一個POST請求! :| – maxxon15 2012-02-18 18:30:40

0

我會使用一個隱藏字段,其中value =「name_of_referring_page」。 這樣,無論用戶的設置,防火牆,瀏覽器等等,您都可以獲得所需的信息。