除了从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