Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP-关闭register globals,修复代码的最佳方法是什么?_Php - Fatal编程技术网

PHP-关闭register globals,修复代码的最佳方法是什么?

PHP-关闭register globals,修复代码的最佳方法是什么?,php,Php,我在一个旧的代码库上工作,程序员假设register\u globals将始终处于打开状态。因此,几乎在每个页面中使用的变量都没有$\u GET或$\u POST前缀(代码库很大,有数百个脚本)。我试图关闭它,但第一个脚本(登录脚本)是无限循环的 我知道,一次执行一个脚本,一次执行一行,并修复变量可能是唯一的选择(根据具体情况添加前缀$\u GET或$\u POST)。以前有人这样做过吗?你是怎么做的?有什么建议吗?这可能会造成更多的损坏,但: 将表单中的name=“foo”元素Grep到CSV

我在一个旧的代码库上工作,程序员假设register\u globals将始终处于打开状态。因此,几乎在每个页面中使用的变量都没有$\u GET或$\u POST前缀(代码库很大,有数百个脚本)。我试图关闭它,但第一个脚本(登录脚本)是无限循环的


我知道,一次执行一个脚本,一次执行一行,并修复变量可能是唯一的选择(根据具体情况添加前缀$\u GET或$\u POST)。以前有人这样做过吗?你是怎么做的?有什么建议吗?

这可能会造成更多的损坏,但:

  • 将表单中的
    name=“foo”
    元素Grep到CSV或行分隔的列表中,并获取
    操作
    属性(仅当它与实际脚本相关时)
  • 浏览CSV或行分隔列表,使用sed查找并替换$currentval,将$currentval替换为$\u POST['currentval']/$\u GET['currentval']或$\u REQUEST['currentval'](但要小心cookies)
  • 例如:

    grep -o -E "(action|name)=\"[a-zA-Z0-9_]+\"" formfile.php | sed -E "s/.*\"([a-zA-Z0-9_]+)\"/\\1/" > vars.list
    
    将为您提供一个以行分隔的已发布变量列表(ish),您可以在bash脚本或其他内容中循环使用它来替换变量

    编辑

    如果要为一个站点打开RegisterGlobals。添加到
    .htaccess
    或Apache配置中:


    php\u value register\u globals“On”

    您可以使用以下代码复制
    register\u globals

    foreach ($_REQUEST as $var => $val) $$var = $val;
    
    然后,您需要做的就是找到一种在每个脚本之前运行这一行的方法。您可以通过多种方式执行此操作:

  • 复制并粘贴到每个文件的开头
  • 使用
    mod_rewrite
    将每个请求转换为(例如)
    register_globals.php?forward_to=original_request_file.php
    其中
    register_globals.php
    包含上述行广告,然后包括
    $\u GET['forward_to']
    文件
  • PHP配置中有一个指令
    auto_prepend_file
    ,它将在每个文件正常运行之前运行一个特定的脚本。你可以让它指向一个上面有一行的文件。更多:
  • 关于第(3)点,您可以在
    .htaccess
    文件中进行如下设置:

    php_value auto_prepend_file /var/www/register_globals.php
    

    这是一个很好的主意,不过这不就像让register globals打开一样吗??也许更糟?我想知道
    是否会按照我的想法去做;)嗯,当我读到这个问题时,我认为OP是在寻找让脚本重新工作的最佳方法,而不必在配置中重新打开
    register\u globals
    ,而他的优先顺序是直接使用
    $\u get
    $\u POST
    。这与使用extract()相当函数,对吗?这只是将每个传入参数注册为全局变量的另一种方法。它不会解决与register\u globals相关的任何问题。@Jacco:register\u globals相关的问题可以很容易地解决。OP没有说明这是出于安全原因。我想他可能是想关闭
    register\u globals
    ,以便在web服务器上运行其他应用程序。