php,读取文件代码问题

时间:2011-01-18 02:30:37

标签: php file preg-match

我在网站上使用这段PHP代码。 现在它老了,我最近有一些攻击。脚本用于包含来自其他地方的另一个文件并发送垃圾邮件。显然,这使我的脚本成为垃圾邮件发件人。

的内容

$htm = ".htm";
$pid = "$details$htm";
function show_details($pid)
{
if (!preg_match("/http/", $pid)) {
require($pid);
} else {
   die;
}
}

以及标题,desc,关键字等。

$txt = ".txt";
$title = "$details$txt";
function show_title($title)
{
if (!preg_match("/http/", $title)) {
if (file_exists($title)) {
require($title);
} else {
   die;
}
}
}

和带有

的display.php文件
print '
<!-- CONTENT -->
';
show_details("$pid");
print '

通过此代码ı能够通过“/display.php?details=mycontentpage”调用任何内容

mycontentpage.htm mycontentpage.txt

.............

现在这段代码必须重新编码..由于网站太大,我无法改变构造。 所以我想我必须坚持这个......

有人可以帮忙吗?有什么意见吗?

1 个答案:

答案 0 :(得分:0)

为了使这样的脚本更安全,您必须确保register_globals设置为OFF。这意味着您必须添加如下行:

php_flag register_globals off

...来.htaccess。然后,在您第一次使用它们时声明所有用户变量,如:

$details = $_GET['details']

...将URI片段“details”中的数据分配给PHP变量$ details。

我可以非常了解你的攻击者是如何通过你的代码和register_globals设置的 - 他们只需创建一个包含PHP代码的.htm文件来重新分配其他变量,包括它,然后中提琴。

有关详细信息,请参阅: http://us2.php.net/manual/en/security.globals.php

希望这有帮助!