php变量能安全地保存完整的代码吗?
假设我有一个文本文件。它包含“harmfull”代码,如:php变量能安全地保存完整的代码吗?,php,sql,security,code-injection,Php,Sql,Security,Code Injection,假设我有一个文本文件。它包含“harmfull”代码,如: <?php phpinfo(); ?> 显然,$content变量将存储完整的代码 我的问题是,将此类信息存储在变量中是否安全 例如,我知道如果我 echo $content; 那么它将是有害的 但是如果我不对变量做任何事情,那么变量保存任何类型的完整代码是否安全 编辑以使其更清晰: 这两者有什么区别 $content = file_get_contents('harmfullcode.txt'); $safevar =
<?php phpinfo(); ?>
显然,$content变量将存储完整的代码
我的问题是,将此类信息存储在变量中是否安全
例如,我知道如果我
echo $content;
那么它将是有害的
但是如果我不对变量做任何事情,那么变量保存任何类型的完整代码是否安全
编辑以使其更清晰:
这两者有什么区别
$content = file_get_contents('harmfullcode.txt');
$safevar = removebadstuff($content);
echo $safevar;
VS
第二个示例在将坏东西分配给$content之前删除它。。。??我对php安全性有点陌生,试图掌握这个概念。谢谢。如果将不会被打印或评估,则可以将其作为任何字符串变量存储在变量中。除非有害代码针对的是PHP本身的
文件\u get\u contents()
或类似函数中的漏洞,否则仅将其存储在变量中应该是安全的。输出它可能不安全,对其运行eval
肯定是个坏主意。这取决于您如何处理此变量
在您的示例中,echo$content代码>不会是有害的,它只会显示有害的代码,而不会执行它
完整示例:
他们几乎一模一样。在第一个示例中,您可能希望取消设置$content
,因为第二个示例仅创建局部变量作为removebadstuff
的第一个参数
记住这一点
必读:如果您不输出或进一步处理该变量,问题是,为什么您首先阅读它?我假设您正在处理该变量,就像echo
,回答您的问题需要知道处理的类型。这个变量会发生什么?如果只知道两个没有发生的情况,但知道发生的情况,那就没那么有趣了。我进行了编辑以使其更加清楚。removebadstuff
函数仍然没有定义。它不显示您对数据的实际操作。通常情况下,数据在输出时会正确编码,因为有不同类型的输出。如果您破坏数据(“删除坏东西”),则很有可能是您做错了什么。RemoveBadstup函数将使用所有适当的措施,如修剪、魔术引号、条纹斜杠、htmlentities、mysqlrealescape等。。。在我编辑的示例中,我想说的是:在第一个示例中,$content变量保存信息而不进行清理,在第二个示例中,它在保存信息之前进行清理。我上面的例子有什么不同吗?或者他们完成了同样的任务?他们几乎是一样的。在第一个示例中,您可能希望取消设置$content
,因为第二个示例仅创建局部变量作为removebadstuff
的第一个参数。顺便说一句:PHP中的字符串是二进制安全的。为了安全起见,我会清理$content变量,比如$safevar=removebadstuff($content);然后我会回显$safevar或者用它做其他事情。我的问题是,在清理变量之前将完整的代码存储在变量中是否安全。echo仍然可以将恶意javascript注入网页。。。。仅仅因为它不会对服务器造成伤害,但只有客户端的浏览器不会降低危害。还有一个问题,在未初始化的数组上使用count()是否安全?与您的其他问题一样,无法确定它是否安全。卫生处理实际上可能有害,因此不安全。PHP本身会将任何数组视为一个数组,而不管它携带的数据是什么。只要它是一个数组,它就是一个数组。请记住,您只是在更改某些数据,不会使任何内容变得安全或不安全。正如你所怀疑的,安全性起作用的部分通常在其他地方,特别是当你广泛应用这些术语时。我认为你应该阅读以下内容:-如果你想从一开始就安全,请拔出服务器的网络电缆。那么PHP是安全的。
$content = file_get_contents('harmfullcode.txt');
$safevar = removebadstuff($content);
echo $safevar;
$content = removebadstuff(file_get_contents('harmfullcode.txt'));
echo $content;
eval($content);
exec($content); // any System program execution function
//preg_relace with e modifier, this is deperecated
// and so on .....