【问题标题】:URL values with $_REQUEST in PHPPHP 中带有 $_REQUEST 的 URL 值
【发布时间】:2011-05-23 01:15:12
【问题描述】:

如果我在 URL 中传递一些参数,使用 $_REQUEST super globa 而不是 $_GET super 检索它们是一种不好的做法

【问题讨论】:

  • 如果您只想获取 GET 变量,这是不好的做法。这对于 POST 和 COOKIE 来说更是一个问题。没有人通过 POST 攻击 GET。 ://

标签: php request


【解决方案1】:

好吧,既然您希望它们仅以 GET 变量的形式出现,为什么要使用 $_REQUEST 而不是 $_GET

$_REQUEST 的问题在于,如果存在 GET、POST 和/或 COOKIE 变量,那么在那个超全局变量中,一个会覆盖另一个。如果您尝试访问 $_REQUEST,您最终会获得什么值,这是半可预测的。

【讨论】:

    【解决方案2】:

    使用$_REQUEST有几个问题。

    1. 您未来的自己和其他维护人员可能会对数据的来源感到困惑。
    2. 它可能会导致冲突,并造成难以发现的错误,在这些错误中您会得到错误的数据(因为$_REQUEST 涵盖了$_GET$_POST$_COOKIE)。

    可能还有一些我现在不记得了。

    所以是的,这是不好的做法。

    【讨论】:

      【解决方案3】:

      不,这不是坏习惯。唯一的问题是$_REQUEST 将包含在GETPOST 命令中传递的值,以及COOKIES 值。因此,如果您只想处理 URL 中传递的值,您可能需要使用 $_GET...

      【讨论】:

        【解决方案4】:

        可以在 php.ini 中设置 GET POST COOKIE vars 的顺序,因此如果您有一个同名的 POST 或 COOKIE var,则 GET var 不会是 REQUEST 中的活动变量。

        最好只为您正在访问的数据类型使用适当的超全局。在您的情况下,$_GET

        否则您(或其他任何人)在使用 $_REQUEST 时不知道数据来自何处

        【讨论】:

          【解决方案5】:

          $_GET 和 $_POST 的一个好处是您可以确切地知道脚本是如何接收参数的。它还将它们保存在单独的命名空间中,因此 $_GET['foo'] 将始终与 $_POST['foo'] 不同,而 $_REQUEST 不会这样做。

          最后,它是一个由您决定的设计选择,但是有一天,您回过头来会很高兴您使用 $_GET 而不是 $_REQUEST(除非您有特定的原因不到)。不过要记住一件事,一如既往:$_GET、$_POST 和 $_REQUEST 都可能包含用户操作的数据,因此不应该被信任。始终消毒!

          【讨论】:

            【解决方案6】:

            这通常不是问题。通常,您希望拥有一个可通过任何方法访问的表单/API。那么 $_REQUEST 是最好的选择。您应该区分功能。如果访问修改数据,则使其依赖于 $_POST。如果访问严格用于查询,则强制它仅使用 $_GET。

            使用 $_REQUEST 存在安全隐患(cookie 固定问题),但它们通常被夸大了。无论如何,它对于当前的 PHP 配置来说已经过时了。所以有一点点盐 - 以前有一些关于这个话题的讨论:

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-11-18
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多