大家好,欢迎来到IT知识分享网。
我不确定这是否可以被标记为社区维基,但无论如何:
是否有一种简单的方法可以杀死register_globals?我正在研究PHP框架,现在,我只是设置脚本,如果register_globals为On则终止.虽然我更愿意强制人们禁用它,但仍有服务器仍然可以使用它.
我知道在PHP 5.3.0中不推荐使用register_globals,在PHP 6中它将被完全删除,但是当它仍在这里时处理它总是一件好事.
我看到了一些方法,我正在考虑使用它:
$temp = array_merge($_GET, $_POST, $_COOKIE);
foreach($temp as $k => $v) {
if(isset($$k)) unset($$k);
}
但是这里有一些问题.它是资源激励,特别是当有大量输入数据时.我不确定在运行时禁用它是否会起作用,例如:
ini_set(‘register_globals’, ‘Off’)
有没有更好的方法让我没有听说过摆脱register_globals?谢谢.
解决方法:
有一些处理register_globals described in the PHP manual的方法.region_globals ini通过ini_set()设置can’t be set at runtime,所以如果你不能用.htaccess或web服务器配置文件,那么提供的方法就是官方解决方法.
它基本上提供了这段代码来模拟兼容性:
// 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
来源: https://codeday.me/bug/20190527/1159741.html
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/20636.html