除了從Cookie中讀取$_REQUEST
的事實,是否有任何理由爲什麼我應該使用$_GET
和$_POST
而不是$_REQUEST
?這樣做的理論和實踐原因是什麼?
回答
我使用$ _REQUEST時,我只是想從用戶的某些數據返回某些數據。
請求會產生副作用時,切勿使用$ _REQUEST。產生副作用的請求應該是POST(出於語義原因,並且由於基本的CSRF內容,假img標籤可以在沒有用戶知道的情況下擊中任何GET端點)。
$ _GET應該用於GET或發佈到頁面時會產生不同的結果。
$ _REQUEST的使用會向您的應用程序打開一些攻擊向量,其中變量可能會被覆蓋,而您不希望它發生。
還要考慮$ _REQUEST將被填充的順序GPC(Get,Post,Cookie)。
即一個請求:
$_GET['foo'] = 'bar'
$_POST['foo'] = 'baz'
將導致
$_REQUEST['foo'] == 'bar'
你已經給了一個答案,所以我給另一個:
這是更多的是文體選擇。例如,您通常不希望將服務器上的狀態更改爲可緩存的信息,因此您可能希望將其限制爲$_POST
變量。
優秀的答案!我希望看到更多這些。 – Tom 2008-12-15 13:54:52
$ _REQUEST經常提到的不安全性是虛假的。所有這些都是從用戶那裏獲取數據的方法,該用戶擁有非安全機器。你總是必須清理輸入,所以使用任何一個都沒有真正的安全優勢。
只有當您在不同渠道上具有相同名稱的值有不同用途時,它纔有意義。在這種情況下,你應該重新命名一些。
非常真實,讓人想尖叫該請求是一些大的安全漏洞,但即使是GET和POST也同樣不安全,很容易調皮位插放進去,你需要經常消毒的所有數據,即使是來自於你的數據庫的東西。 – TravisO 2008-12-15 17:00:10
除了這個事實,$ _REQUEST從餅乾
除了這個事實,這是不確定的(這是在每個安裝級配置)讀取,使用$_REQUEST
的問題是它過於簡化的東西。 GET請求和POST請求之間存在(或應該存在)語義差異。因此,如果您從一個源或另一個源獲得輸入,它對您的應用程序應該很重要。這就是HTTP協議的定義方式,所以如果忽略它,就會破壞協議,這會使應用程序的互操作性降低。這是使用語義HTML標記而不是面向演示標記的類型參數。或者更一般地說,遵循協議的意圖,而不是僅僅在具體情況下做任何工作。
這是我剛剛找到的一個:When and why should $_REQUEST be used instead of $_GET/$_POST/$_COOKIE?。 對不起,我沒有發現它越快,這樣我就不會問這個問題......
HTTP GET在語義意味着被用來獲取一個網頁,而POST可以說,在使用時,你會想到的是某種狀態的改變。
例如,有一種期望,使用與所述相同的參數多次產生相同的結果得到的,在使用POST,他們可能沒有。
不使用POST時,你應該屈服於問題。我認爲Ruby on Rails AJAX庫使用GET而不是POST,並且導致大量數據在被網絡蜘蛛所觸及時丟失。
因此,你應該避免使用$ _REQUEST。您應該知道頁面的用途,並決定如何回答GET請求以及如何回覆POST請求。
- 1. $ _POST,$ _GET和$ _REQUEST空
- 2. 何時以及爲什麼要使用$ _REQUEST而不是$ _GET/$ _POST/$ _COOKIE?
- 3. android httppost爲什麼在PHP/MySQL中使用$ _REQUEST而不是$ _POST?
- 4. $ _POST,$ _GET,$ _REQUEST有什麼區別?
- 5. PHP $ _REQUEST $ _GET或$ _POST
- 6. $ _POST失敗,而不是$ _REQUEST
- 7. $ _GET,$ _POST和$ _REQUEST未被填充
- 8. 我該如何使用_GET和_POST?
- 9. 有什麼方法可以使用$ _POST而不是$ _GET?
- 10. 我應該更改$ _REQUEST到$ _POST
- 11. Wordpress是否有$ _POST,$ _GET和$ _REQUEST的包裝類?
- 12. $ _GET和$ _POST
- 13. 我是否應該總是使用反斜槓_POST _GET和_COOKIE變量
- 14. 爲什麼我應該使用Flex而不是JQuery?
- 15. 爲什麼我應該使用formlayout/formdata而不是setBounds?
- 16. 爲什麼我應該使用reactjs而不是jquery?
- 17. 爲什麼我應該使用content_tag而不是「常規」html?
- 18. Android:何時/爲什麼我應該使用FrameLayout而不是Fragment?
- 19. 在VB.NET中,爲什麼我應該使用Select而不是If?
- 20. 爲什麼我應該使用threading.Timer而不是Loop + Sleep?
- 21. 爲什麼我應該使用Amazon Kinesis而不是SNS-SQS?
- 22. 爲什麼我應該使用XMLLIst而不是簡單的XML?
- 23. 爲什麼我應該使用var而不是類型?
- 24. 爲什麼我應該使用IHttpActionResult而不是HttpResponseMessage?
- 25. 爲什麼我應該使用JLabel而不是Image?
- 26. 爲什麼我應該使用1bit位域而不是bools?
- 27. 爲什麼我應該使用goog.ui.Checkbox而不是常規輸入?
- 28. Python:爲什麼我應該使用next()而不是obj.next()?
- 29. 爲什麼我應該使用ViewModel後綴而不是VM?
- 30. 爲什麼我應該使用整數而不是浮點數?
請注意,你可以改變什麼順序請求變量填充在,如果你控制的php.ini – gnud 2008-12-15 13:24:15
難道只是我還是會後跟從得到你的榜樣,因此變量的內容被改寫?不知道,這就是爲什麼我問... – Franz 2009-12-17 22:17:29