php变量可以安全地保存有害代码吗?

时间:2012-10-25 06:05:58

标签: php sql security code-injection

假设我有一个文本文件。它包含“有害”代码,如:

<?php phpinfo(); ?>

或者它可能是其他任何东西,SQL注入代码,HTML链接等...

现在这是我的示例脚本:

$content = file_get_contents('harmfullcode.txt');

现在很明显,$ content变量将存储有害代码。

我的问题是,将这些信息存储在变量中是否安全?

我知道如果我

echo $content;

然后它会有害。

但如果我不对变量做任何事情,变量是否可以安全地保存任何类型的有害代码?

编辑以使其更清晰:

这有什么区别?

$content = file_get_contents('harmfullcode.txt');
$safevar = removebadstuff($content);
echo $safevar;

VS

$content = removebadstuff(file_get_contents('harmfullcode.txt'));
echo $content;

第二个例子在将它分配给$ content之前删除了不好的东西...... ??我对php安全性有点新意,试图掌握这个概念。谢谢。

4 个答案:

答案 0 :(得分:0)

如果不打印或评估,则可以将其作为任何字符串变量存储在变量中。

答案 1 :(得分:0)

除非有害代码针对file_get_contents()中的漏洞或PHP本身的类似功能,否则将其存储在变量中应该是安全的。输出它可能是不安全的,在它上运行eval肯定是一个坏主意。

答案 2 :(得分:0)

这取决于你如何对待这个变量。

在您的示例中,echo $content;不会有害,它只会显示有害代码,而不执行它。

有害的例子:

eval($content);

exec($content); // any System program execution function

//preg_relace with e modifier, this is deperecated

// and so on .....

答案 3 :(得分:0)

嘿,几乎完全相同。您可能希望在第一个示例中使用unset $content,因为第二个示例仅将局部变量创建为removebadstuff的第一个参数。

请记住strings in PHP are binary-safe

必读: The ultimate clean/secure function