PHP-关闭register globals,修复代码的最佳方法是什么?
我在一个旧的代码库上工作,程序员假设register\u globals将始终处于打开状态。因此,几乎在每个页面中使用的变量都没有$\u GET或$\u POST前缀(代码库很大,有数百个脚本)。我试图关闭它,但第一个脚本(登录脚本)是无限循环的PHP-关闭register globals,修复代码的最佳方法是什么?,php,Php,我在一个旧的代码库上工作,程序员假设register\u globals将始终处于打开状态。因此,几乎在每个页面中使用的变量都没有$\u GET或$\u POST前缀(代码库很大,有数百个脚本)。我试图关闭它,但第一个脚本(登录脚本)是无限循环的 我知道,一次执行一个脚本,一次执行一行,并修复变量可能是唯一的选择(根据具体情况添加前缀$\u GET或$\u POST)。以前有人这样做过吗?你是怎么做的?有什么建议吗?这可能会造成更多的损坏,但: 将表单中的name=“foo”元素Grep到CSV
我知道,一次执行一个脚本,一次执行一行,并修复变量可能是唯一的选择(根据具体情况添加前缀$\u GET或$\u POST)。以前有人这样做过吗?你是怎么做的?有什么建议吗?这可能会造成更多的损坏,但:
name=“foo”
元素Grep到CSV或行分隔的列表中,并获取操作
属性(仅当它与实际脚本相关时)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']
文件李>
auto_prepend_file
,它将在每个文件正常运行之前运行一个特定的脚本。你可以让它指向一个上面有一行的文件。更多:.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服务器上运行其他应用程序。