在使用PHP 5.6时,我偶然发现了通过backticks执行命令,我想知道这怎么会被证明是PHP支持的网站中的一个漏洞。
我可以理解以下代码:
<?php
$output = `ls -al`;
echo "<pre>$output</pre>";
?>
允许在shell中执行$output变量内容。
我现在的问题是,是否需要围绕变量值对backtick进行硬编码,或者它们也可以是值的一部分?
例如,在前面的代码块中,backtick是围绕该值进行硬编码的,但如果$output变量是通过GET/POST REQUEST设置的,该怎么办
http://example.com/index.php?arg=`exec code`
或
http://example.com/index.php?arg=%60exec%20code%60
和php:
<?php
$output = $_REQUEST['arg']
echo "<pre>$output</pre>";
?>
那是易受攻击的代码吗?
提前感谢
除非对用户输入中的特殊字符进行评估,否则不会对其进行评估。
这意味着将字符串注入将被评估的上下文中(例如,eval
函数用于评估为PHP,mysqli::query()
函数用于评估数据库服务器的SQL,或者<script>
函数用于评估浏览器的JS