所以,我编写了一段时间(2年),我有一个非常主观的问题:
对数据使用$ _REQUEST是错误的吗?
这主要涉及到身份验证。
如果您考虑$_REQUEST
中数据的3种方式,它可以来自cookie,表单或查询字符串。现在,我知道大多数人只有在期待Cookie时,才会使用$_POST
直接从$_GET
或$_COOKIE
获取信息。
我的理论是,实际上,这些数据应该没有任何区别,如果您将$_POST
或$_GET
替换为$_REQUEST
,则不应有任何区别。
如果要对系统中的用户进行身份验证,如果身份验证详细信息包含在$_POST
或$_GET
数组中,那么它真的很重要吗?哎呀,如果他们在$_COOKIE
也可能无关紧要。他们仍然会为您提供登录站点的凭据,您应该检查其是否正确,如果是,请将其登录。
现在,我确实意识到如果您尝试使用通过查询字符串提交数据的登录表单存在安全问题,但我不认为这与问题有关。此外,如果某人登录失败次数过多,则应设置适当的限制以避免服务器过载。
我想在此发表意见。
社区维基是一个很好的衡量标准。
哦,顺便说一下,如果您对$_REQUEST
Why should I use $_GET and $_POST instead of $_REQUEST? When and why should $_REQUEST be used instead of $_GET / $_POST / $_COOKIE?
答案 0 :(得分:14)
在“良好”的编码实践中,您希望尽可能消除歧义。
由于$ _REQUEST默认包含来自$ _POST,$ _GET和$ _COOKIE的数据,因此存储使用$ _REQUEST检索的数据的变量所持有的值将不明确它来自哪个方法。
如果我们更具体,它将有利于代码的可读性,以及对逻辑的理解,并有助于将来进行调试。
(更不用说有关每种方法的安全问题,尤其是$ _GET)
答案 1 :(得分:3)
我会说避免一起。我同意Sev的观点,即消除歧义很重要,原因很多(调试,清晰/自我记录,优雅等),但是可能会出现重大的安全问题,这将是我避免它的主要原因。
举个简单的例子,当两个数组中发送相同的密钥时会发生什么(例如$_POST['criticalInfo']
和$_GET['criticalInfo']
)?与大多数安全问题一样,漏洞存在于单个实现中,因此无法猜测您的特定风险。事实上,模棱两可经常会打开漏洞。
答案 2 :(得分:0)
不要将它留给PHP_INI中的“variables_order”来确定脚本从哪里获取变量。使用$ _GET,$ _POST等
答案 3 :(得分:0)
错误?否。
是否低于$_GET
或$_POST
?是。使用正确的数组,您将避免因不知道$_REQUEST
的数组内容来自何处而导致的各种问题。
答案 4 :(得分:0)
它也是关于不让凭证以除POST请求之外的任何其他方式进行。我不希望我的GET请求有副作用(比如登录用户)。