我不是一个PHP开发人员,但我在几个地方看到人们似乎把它当作瘟疫之类的东西.为什么?
我正在研究一个使用的框架register_globals.我的本地php版本是5.4.我知道register_globals自从被register_globals删除后被删除了register_globals.但我必须让它继续工作register_globals,有什么办法吗?任何帮助和建议都将非常值得一提.谢谢.
我继承了一些遗留的PHP代码,这些代码是在标准实践中使用时所写的register_globals(从PHP 4.2.0起,该指令默认为off,2002年4月22日发布).
我们现在知道,启用它对安全性有害.问题是如何在代码中找到我需要使用的所有位置$_GET或$_POST?我唯一的想法是设置错误报告以警告未初始化的变量,然后测试站点的每个部分.有没有更简单的方法?我是否必须测试站点中的每个代码路径,或者PHP会在文件的基础上发出警告吗?
我继承了一个充满了需要register_globals打开的代码的Web服务器.其中大部分是由多年来来去的随机人员编写的自定义代码.我已经在我所知道的脚本中修复了大部分内容,但我的问题在于找到我不知道的内容.
我正在考虑编写一个应用程序来扫描Web服务器上的每个目录,以识别需要的PHP脚本register_globals.这样做有什么好的策略吗?
我考虑过的一种方法涉及以某种方式强制PHP报告所有错误,执行脚本和检查未定义的变量通知.我可以构建一个为此读取STDERR流的应用程序.
你能想到更好的方法吗?
所以Laravel的新版本已经内置了登录和注册系统,因此我更改了注册页面中的一些字段,现在希望在登录后在主页上显示"用户名"而不是"名称".有没有人知道这归因于哪里?一直在寻找这个.谢谢.
我不确定将其标记为社区 wiki 是否合适,但无论如何:
有没有一种简单的方法可以杀死 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)) 未设置($$k);
}
不过这里有一些问题。它是资源激励,特别是当有大量输入数据时。我不确定在运行时禁用它是否有效,例如:
ini_set('register_globals', 'Off')
Run Code Online (Sandbox Code Playgroud)
有没有我没有听说过的更好的方法来摆脱 register_globals?谢谢。
我在2个不同的文件夹上有2个scritpts.其中一个需要将寄存器全局变为On而另一个需要Off.
是否可以在一个文件夹上启用regsiter全局变量并在另一个文件夹上禁用它?(也许是.htaccess?)
问候
我们有一个依赖于register_globals开启工作的客户端应用程序,但我们将它托管在我们的共享服务器上,并且不想在我们的主php.ini文件中打开register_globals.
我尝试插入ini_set ( 'register_globals' , 'On' );但它没有用.为什么不呢?还有更好的方法吗?
我可能有点厚,但我似乎找不到这个问题的答案.我正从一个带有寄存器全局变量的服务器移动到一个关闭它的服务器.这是一件好事,但不幸的是,我已经习惯了几年和几年使用寄存器全局变量ON,导致我编写了草率的代码.我现在正试图解决这个问题.
我正在尝试重写一些在$ _POST中包含变量变量的旧代码.
我知道这是一个愚蠢的例子,但它说明了我试图解决的问题.以下将适用于寄存器全局ON:
<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $$variable;?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>
Run Code Online (Sandbox Code Playgroud)
如何在注册全局变量关闭的情况下使用它?以下显然不起作用:
<?php $variable = "fullname";?>
<form action="/test/" method="post">
<label for="fullname">Full Name:</label> <input name="fullname" type="text" value="<?php echo $_POST[$$variable];?>" size="20" maxlength="150" />
<input name="submit" type="submit" value="Go!" />
</form>
Run Code Online (Sandbox Code Playgroud)
请放轻松我 - 我知道我可能是愚蠢的,但我似乎无法理解这一点.
问题:在下面的代码中,当我从sandbox1页面移动到sandbox2时,$ _SESSION [page_name]的新值不会被传递并恢复为index的初始值.如果在进入页面后我重新加载页面,新值似乎神奇地显示出来.代码有问题吗?你能解释为什么$ _SESSION的新值没有传播吗?
Page index.php
<?php
session_start();
$_SESSION['page']="index";
echo "This page: ".$_SESSION['page']."<br><br>";
?>
Run Code Online (Sandbox Code Playgroud)
页面sandbox1.php
<?php
session_start();
echo "From page: ".$_SESSION['page']."<br>";
$_SESSION['page']="Sandbox1";
echo "This page: ".$_SESSION['page']."<br><br>";
?>
Run Code Online (Sandbox Code Playgroud)
页面sandbox2.php
<?php
session_start();
echo "From page: ".$_SESSION['page']."<br>";
$_SESSION['page']="Sandbox2";
echo "This page: ".$_SESSION['page']."<br><br>";
?>
Run Code Online (Sandbox Code Playgroud)
在加载index.php时,它输出:
本页:索引
正如所料.
从index.php到Sandbox1输出的超链接
来自页面:索引
本页面:Sandbox1
(新值$_SESSION['page'])如预期.
从Sandbox1到Sandbox2输出的超链接:
来自页面:索引
($_SESSION恢复到价值指数)预计会看到
来自页面:sandbox1
本页面:Sandbox2
(新值)如预期.
附加信息PHP版本5.3.注册全局设置为"OFF"
在我的php.ini我register_globals=Off
但是,如果我访问仍然
`/testing/testing.php?abc=19`
Run Code Online (Sandbox Code Playgroud)
然后abc=19通过使用显示值echo $_REQUEST['abc'].
问题是为什么我仍然可以访问abc变量的值?
Note: I am using XAMPP.
register-globals ×11
php ×10
.htaccess ×1
arrays ×1
debugging ×1
laravel-5 ×1
login ×1
superglobals ×1
username ×1