如果您为$ _REQUEST分配值会怎样?

Jan*_*sen 7 php superglobals

我最近在PHP脚本中遇到过这一行:

$_REQUEST['start_date']=$date;
Run Code Online (Sandbox Code Playgroud)

是否允许或以任何方式为超级全局$ _REQUEST变量赋值?如果有$ _COOKIE ['start_date']会改变cookie值吗?

jed*_*rds 7

是的,它允许并且可能由于多种原因而有所帮助.

  • 调试 -如果,你想"逼"某请求参数某些原因,你可以在设置的值$_REQUEST,$_GET$_POST阵列.这将覆盖请求页面发送的任何值,这可能是期望的.
  • 因为您要对整个数组执行某些操作 - 例如,如果您想要json_encode所有$_REQUEST键值对以及一些其他值,那么以$_REQUEST这种方式"添加"值可能会更快,然后传递$_REQUESTjson_encode().

关于你的问题$_COOKIE,不,你不能以这种方式改变cookie的价值,只能访问它.

作者注意:以下示例作为建议和批准的编辑添加到我的原始答案中.虽然它可能有效,但有更好的方法可以保护您的站点免受注入攻击(例如准备好的语句).恕我直言,谨慎的程序员应该在依赖下面的代码之前强烈考虑这些方法.

考虑在您的网站上防止SQL注入攻击.这个简单的代码将为所有$_REQUEST变量停止它们(mysqli示例):

function injectionwall($dbinterface)
{
    foreach($_REQUEST as $key => $data)
    {
        $_REQUEST[$key]=$dbinterface->real_escape_string($data);
    }
}
Run Code Online (Sandbox Code Playgroud)

所有$_REQUEST变量现在都可以安全使用:)

  • RE:“作者注释”-您添加该警告是非常正确的。我实际上支持删除该示例,因为它在很多方面实际上都是非常糟糕的做法。必须有一个更安全的例子(尽管我正在努力想出一个有用的例子)。 (2认同)