php变量可以安全地保存有害代码吗? [关闭]
Posted
技术标签:
【中文标题】php变量可以安全地保存有害代码吗? [关闭]【英文标题】:Can php variable hold harmfull code safely? [closed] 【发布时间】:2012-10-15 06:42:57 【问题描述】:假设我有一个文本文件。它包含“有害”代码,例如:
<?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 安全的新手,试图掌握这个概念。谢谢。
【问题讨论】:
如果您不输出或进一步处理该变量,问题是,您为什么首先要读取它?我假设您正在处理该变量,并且像echo
一样,处理类型对于回答您的问题是必要的。那个变量会发生什么?只知道两个没有发生的案例,但知道确实发生的案例就没那么有趣了。
我进行了编辑以使其更清晰。
removebadstuff
函数仍未定义。它没有显示您对数据的实际操作。同样通常,在 output 时数据会被正确编码,因为有不同类型的输出。如果您破坏数据(“删除坏东西”),那么您做错事的可能性很高。
removebadstuff 函数将使用所有适当的措施,如修剪、魔术引号、stripslashes、htmlentities、mysqlrealescape 等...我在编辑的示例中想说的是:在第一个示例中,$content 变量在不清理的情况下保存信息,在第二个示例中,它在保存信息之前进行了清理。我上面的例子有什么不同吗?还是他们完成相同的任务?
它们几乎相同。您可能希望在第一个示例中使用unset
$content
,因为第二个示例仅创建局部变量作为removebadstuff
的第一个参数。顺便说一句:PHP 中的字符串是二进制安全的。
【参考方案1】:
如果不会被打印或评估,那么可以将它作为任何字符串变量存储在变量中。
【讨论】:
为了安全起见,我会清理 $content 变量,例如 $safevar = removebadstuff($content);然后我会回显 $safevar 或用它做其他事情。我的问题是,在清理之前将有害代码存储在变量中是否安全。【参考方案2】:除非有害代码针对file_get_contents()
中的漏洞或PHP 本身的类似函数,否则将其存储在变量中应该是安全的。输出它可能不安全,在上面运行eval
肯定是个坏主意。
【讨论】:
【参考方案3】:这取决于你如何对待这个变量。
在您的示例中,echo $content;
不会有害,它只会显示有害代码,而不执行它。
有害的例子:
eval($content);
exec($content); // any System program execution function
//preg_relace with e modifier, this is deperecated
// and so on .....
【讨论】:
echo 仍然可以将恶意 javascript 注入网页......只是因为它不会损害服务器,但只有客户端的浏览器不会降低它的危害【参考方案4】:它们几乎一模一样。您可能希望在第一个示例中使用unset
$content
,因为第二个示例仅创建局部变量作为removebadstuff
的第一个参数。
请记住strings in PHP are binary-safe。
必读: The ultimate clean/secure function
【讨论】:
哦,还有 1 个问题,在未清理的数组上使用 count() 是否安全? 与您的其他问题一样,不能说它是否安全。消毒实际上可能会造成伤害,因此不安全。 PHP 本身会将任何数组视为数组,而不管它携带的数据如何。只要它是一个数组,它就是一个数组。请记住,您只是在更改一些数据,不会使任何事情变得安全或不安全。安全发挥作用的部分通常在您怀疑的其他地方,尤其是当您非常广泛地应用这些术语时。 我认为您应该阅读以下内容:***.com/questions/4223980/… - 如果您希望从一开始就安全,请拔出服务器的网络电缆。那么 PHP 是安全的。以上是关于php变量可以安全地保存有害代码吗? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章