PHP弃用代码?

时间:2010-02-19 12:00:36

标签: php

全部

运行PHP版本5.2.11并且我们已经获得了一个我们被告知在早期版本(可能是4版)上运行的网站。

我们遇到一个奇怪的问题,其中有几个页面有一堆更新MySql的表单无效。问题是更新脚本中使用的变量没有在PHP之前的任何地方定义。例如

UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'"

现在,如果我们将其更改为..

$form_firstname = $_POST['form_firstname'];
UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'"

然后更新工作。我们可以为每个更新语句中定义的每个变量执行此操作,但我认为这看起来必须先前工作,我们正在查看形成这些变量的某些已弃用的代码。我找了任何

import_request_variables

陈述,但是nada。

任何人都可以想到在新服务器中默认关闭的任何内容会导致此问题,或者是否必须在某处声明此变量?

非常欢呼

4 个答案:

答案 0 :(得分:8)

这是register_globals不要使用它;它是gaping security hole

答案 1 :(得分:1)

如其他地方所述,因为原始代码启用了register_globals - 这是非常糟糕的做法。

作为一个快速黑客,您可以在每个页面的顶部添加一些代码(在全局范围内):

extract($_GET); extract($_POST);

...具有相同的效果,但逐个脚本。但是,只有在您正确地重新实现代码时才能保持站点运行。请注意,这不是代码的唯一问题 - 将未经检查的用户输入拼接到SQL语句中是灾难的一个方法。

您应该将代码重写为....

$form_firstname = mysql_real_escape_string($_POST['form_firstname'], $db_handle);
$id = mysql_real_escape_string($_POST['id'], $db_handle);
$qry="UPDATE users SET FirstName='$form_firstname'WHERE UserID='$id'";

下进行。

答案 2 :(得分:0)

我希望你不要将它用于严肃的事情。该代码适用于各种入侵,注入和黑客攻击。我有两个答案给你。快速&脏:打开register_globals。替代方案:找人从头开始重写您的应用程序或找到更好的应用程序。

答案 3 :(得分:-2)

我认为你需要在php.ini中设置resister_global = on