我有一個表單用戶可以輸入他們的名字,然後它會將它添加到$郵件中發送郵件。
使用$_POST
還是$_REQUEST
更好?
下面是使用$_REQUEST
$message.= "Name: ".$_REQUEST["fname"]." ".$_REQUEST["mname"]." ".$_REQUEST["lname"]."\n";
我有一個表單用戶可以輸入他們的名字,然後它會將它添加到$郵件中發送郵件。
使用$_POST
還是$_REQUEST
更好?
下面是使用$_REQUEST
$message.= "Name: ".$_REQUEST["fname"]." ".$_REQUEST["mname"]." ".$_REQUEST["lname"]."\n";
答案是:這取決於你希望如何使用它。
如果您使用$_POST
,這意味着它只能通過POST進入。 如果您使用的是$_REQUEST
,那意味着您接受POST,GET(和COOKIE,但主要是我們感興趣的前兩個)。
對於這樣的事情,$_POST
可能會更加整潔,但如果您製作搜索引擎,允許設置搜索網址可能是一個好主意。但是,您可能希望允許使用大量特殊參數來縮小搜索範圍,如果這可能佔用大量URL空間,那麼您可能還需要允許POSTDATA。
正如Dylan提到的,請記住,任何一種安全性都不能取代。
不要緊,你用哪一個的片段。只要確保你使用某種形式的安全形式。
_POST如果數據被更新的地方(即,如果該操作有一個副作用),否則_REQUEST,和,如果你不關心數據是否通過GET,POST,或任何其他方法來。
我以前的做法是使用$ _REQUEST,因爲我認爲這是一個很大的錯誤。最近,我一直試圖更加努力地使用GET僅用於POST請求的只讀寫請求&。
爲此,我認爲使用$ _GET GET請求& $ _ POST POST請求,使我的意圖更加清晰的在我的代碼。
除非您有其他方面的好理由(例如Michael提到的搜索引擎),否則最好使用$ _GET和$ _POST代替$ _REQUEST,以避免任何含糊或混淆可能在GET和POST數據中具有相同的參數名稱。
我只是聽了Security Now情節#166這是所有關於跨站請求僞造,並在其中,史蒂夫讓使用$_POST
的形式,而不是$_REQUEST
一個很好的案例。 (間接地,他沒有談論PHP本身,但是確實表示不應該同時接受GET和POST兩種形式。)原因是使用GET請求進行CSRF攻擊很容易,但使用POST並不容易。
使用$_POST
本身並不能消除CSRF攻擊的可能性,但它確實減少了它。 Steve還建議在請求中使用密碼強的僞隨機隱藏字段,以消除「盲目」請求的可能性。
我只使用$ _REQUEST的時候,我需要能夠支持$ _POST或$ _GET的數據。
例如,如果我有一個應該修改記錄的表單,我最初可能會將記錄ID作爲id = X傳遞給url。所以當第一次加載表單時,我可以使用$ _GET ['id']來找出我們要修改的記錄。
但是,在提交修改操作時,表單應該被POST,因爲它將改變數據並且不是冪等的。在這種情況下,記錄ID在處理表單提交時可以作爲$ _POST ['id']訪問。
但是如果在表單提交中出現錯誤並且我需要用有用的錯誤消息重新加載表單,會發生什麼情況?在這種情況下,表單生成代碼需要通過查看不在URL中的POST代碼來確定要使用的記錄。
在這種情況下,我會在表單顯示邏輯中使用$ _REQUEST ['id'],以便它可以支持這兩種情況。但對於表單處理,我會使用$ _POST ['id']進行嚴格檢查。
我該怎麼做才能讓我的表單更安全? – Brad 2008-10-27 14:52:43