gpt4 book ai didi

php - 处理 register_globals

转载 作者:可可西里 更新时间:2023-10-31 22:16:58 25 4
gpt4 key购买 nike

我不确定这是否适合标记为社区 wiki,但无论如何:

有没有简单的方法来杀死 register_globals?我正在开发一个 PHP 框架,现在,我只是将脚本设置为在 register_globals 打开时终止。虽然我更喜欢强制人们禁用它,但服务器仍然启用它。

我知道在 PHP 5.3.0 中 register_globals 已被弃用,在 PHP 6 中它将被完全删除,但在它仍然存在时处理它总是一件好事。

我看到了一些方法,目前正在考虑使用它:

$temp = array_merge($_GET, $_POST, $_COOKIE);foreach($temp as $k => $v) {    if(isset($$k)) unset($$k);}

There are some problems over here, though. It is resource incentive, specially when there's a lot of input data. I am not sure whether disabling it on runtime would work, for example:

ini_set('register_globals', 'Off')

有没有我没听说过的更好的方法来摆脱 register_globals?谢谢。

最佳答案

有处理register_globals的方法described in the PHP manual . register_globals ini 设置 can't be set at runtime通过 ini_set(),所以如果您不能使用 .htaccess 或网络服务器配置文件来完成,官方提供的方法将是解决方法。

它基本上提供了这段代码来模拟兼容性:

<?php
// Emulate register_globals off
function unregister_GLOBALS()
{
if (!ini_get('register_globals')) {
return;
}

// Might want to change this perhaps to a nicer error
if (isset($_REQUEST['GLOBALS']) || isset($_FILES['GLOBALS'])) {
die('GLOBALS overwrite attempt detected');
}

// Variables that shouldn't be unset
$noUnset = array('GLOBALS', '_GET',
'_POST', '_COOKIE',
'_REQUEST', '_SERVER',
'_ENV', '_FILES');

$input = array_merge($_GET, $_POST,
$_COOKIE, $_SERVER,
$_ENV, $_FILES,
isset($_SESSION) && is_array($_SESSION) ? $_SESSION : array());

foreach ($input as $k => $v) {
if (!in_array($k, $noUnset) && isset($GLOBALS[$k])) {
unset($GLOBALS[$k]);
}
}
}

unregister_GLOBALS();

?>

关于php - 处理 register_globals,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2026361/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com