【发布时间】:2011-05-23 01:15:12
【问题描述】:
如果我在 URL 中传递一些参数,使用 $_REQUEST super globa 而不是 $_GET super 检索它们是一种不好的做法
【问题讨论】:
-
如果您只想获取 GET 变量,这是不好的做法。这对于 POST 和 COOKIE 来说更是一个问题。没有人通过 POST 攻击 GET。 ://
如果我在 URL 中传递一些参数,使用 $_REQUEST super globa 而不是 $_GET super 检索它们是一种不好的做法
【问题讨论】:
好吧,既然您希望它们仅以 GET 变量的形式出现,为什么要使用 $_REQUEST 而不是 $_GET?
$_REQUEST 的问题在于,如果存在 GET、POST 和/或 COOKIE 变量,那么在那个超全局变量中,一个会覆盖另一个。如果您尝试访问 $_REQUEST,您最终会获得什么值,这是半可预测的。
【讨论】:
使用$_REQUEST有几个问题。
$_REQUEST 涵盖了$_GET、$_POST 和$_COOKIE)。可能还有一些我现在不记得了。
所以是的,这是不好的做法。
【讨论】:
不,这不是坏习惯。唯一的问题是$_REQUEST 将包含在GET 和POST 命令中传递的值,以及COOKIES 值。因此,如果您只想处理 URL 中传递的值,您可能需要使用 $_GET...
【讨论】:
可以在 php.ini 中设置 GET POST COOKIE vars 的顺序,因此如果您有一个同名的 POST 或 COOKIE var,则 GET var 不会是 REQUEST 中的活动变量。
最好只为您正在访问的数据类型使用适当的超全局。在您的情况下,$_GET
否则您(或其他任何人)在使用 $_REQUEST 时不知道数据来自何处
【讨论】:
$_GET 和 $_POST 的一个好处是您可以确切地知道脚本是如何接收参数的。它还将它们保存在单独的命名空间中,因此 $_GET['foo'] 将始终与 $_POST['foo'] 不同,而 $_REQUEST 不会这样做。
最后,它是一个由您决定的设计选择,但是有一天,您回过头来会很高兴您使用 $_GET 而不是 $_REQUEST(除非您有特定的原因不到)。不过要记住一件事,一如既往:$_GET、$_POST 和 $_REQUEST 都可能包含用户操作的数据,因此不应该被信任。始终消毒!
【讨论】:
这通常不是问题。通常,您希望拥有一个可通过任何方法访问的表单/API。那么 $_REQUEST 是最好的选择。您应该区分功能。如果访问修改数据,则使其依赖于 $_POST。如果访问严格用于查询,则强制它仅使用 $_GET。
使用 $_REQUEST 存在安全隐患(cookie 固定问题),但它们通常被夸大了。无论如何,它对于当前的 PHP 配置来说已经过时了。所以有一点点盐 - 以前有一些关于这个话题的讨论:
【讨论】: