【问题标题】:How to block some php variable from being used如何阻止某些php变量被使用
【发布时间】:2012-10-09 05:46:46
【问题描述】:

当我多次告诉他们不要使用它,而是使用$_POST$_GET 时,我的团队继续使用$_REQUEST 变量。我想知道是否有办法阻止这个变量,所以如果他们再次使用它,代码会给出致命错误。或者也许以某种方式弃用它。

例如我可以将unset($_REQUEST); 放在我的包含文件的顶部,但我敢打赌他们可以找到它并禁用它,我需要能够在服务器端执行此操作。

【问题讨论】:

  • 如果他们无法理解它们之间的区别,请解雇他们,或者给他们一些培训。您不能阻止 _REQUEST。它具有合法用途(当 var 可以在 _GET 和/或 _POST 中时)。
  • 查看 php.ini 中的 request_order php.net/manual/en/ini.core.php#ini.request-order 但它是一个订单变量,不确定是否可以将其关闭。
  • 亲爱的约翰 - 您需要解决的是团队。如果他们不能合作,$_REQUEST 并不是唯一的问题。我认为与其在代码中制作东西,不如召开会议并进行认真的讨论。只是我的意见。
  • Grzegorz 这已经完成并且仍然存在同样的问题。我告诉我的老板停止与他们合作,但他似乎对他们的价格或其他东西很感兴趣。
  • 旧习惯难改......他需要一些时间来修复团队

标签: php security disabled-input


【解决方案1】:

如果您想这样做以确保您的代码安全,您可以创建自己的 $_Request 并且它是安全的(放入引导程序)

$_REQUEST = array_merge($_GET, $_POST); 

【讨论】:

  • 这根本不会禁用 $_REQUEST 变量。
  • 这仍然没有回答问题。
【解决方案2】:

我不确定任何官方方式,即使request_order 并不意味着它将超级全局数组 REQUEST 留空。

您可以做的是拥有自己的小扫描仪 .. 在代码中查找 REQUEST ..(请注意,这只是一个实验)

ini_set("display_erros", "On");
error_reporting(E_ALL);
set_time_limit(0);

findUsage(__DIR__,'$_REQUEST');

输出示例

$_REQUEST Found in /public_html/www/stockoverflow/a.php Line 7 
$_REQUEST Found in /public_html/www/stockoverflow/c.php Line 3 
$_REQUEST Found in /public_html/www/stockoverflow/lib/phpThumb/demo/index.php Line 2 
$_REQUEST Found in /public_html/www/stockoverflow/lib/phpThumb/demo/phpThumb.demo.gallery.php Line 36 
$_REQUEST Found in /public_html/www/stockoverflow/lib/phpThumb/demo/phpThumb.demo.gallery.php Line 45 
$_REQUEST Found in /public_html/www/stockoverflow/lib/phpThumb/demo/phpThumb.demo.gallery.php Line 47 
$_REQUEST Found in /public_html/www/stockoverflow/lib/phpThumb/demo/phpThumb.demo.gallery.php Line 4

使用的功能

function findUsage($projectDir,$find) {
    echo "<pre>";
    $di = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(__DIR__, FilesystemIterator::SKIP_DOTS));
    foreach ( $di as $file ) {
        if (! $file->isFile() || $file->getExtension() != "php")
            continue;
        $n = 0;
        foreach ( file($file) as $line ) {
            $n ++;
            if (strpos($line, $find) !== false) {
                echo $find, " Found in $file Line $n \n";
                flush();
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-03
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多