PHP的一个EVAL的利用防范
<p>作者:phpeval</p><p>前段时间一个程序出的问题。就和这差不多。</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode76"><br /><?php<br />$code="${${eval($_GET)}}";<br />?> <br /></div></p>
<p>对于上面的代码。如果在URL提交http://www.phpeval.cn/test.php?c=phpinfo(); 就可以发现phpinfo()被执行了。而相应的提交c=echo 11111; 发现1111也被输出了。这个代码被执行了。</p>
<p>(好些PHP的代码在写文件的时候。都没有注意到这一点。他们在代码中写php的文件的时候。把代码加在双引号之内。然后过滤掉双引号。认为这样就不能执行了。实际上是可以的。)<br />还有一些利用方式,比如:</p>
<p><br><div class="msgheader"><div class="right"><span style="CURSOR: pointer" class="copybut"><u>复制代码</u></span></div>代码如下:</div><div class="msgborder" id="phpcode77"><br /><?php<br />$code=addslashes($_GET);<br />eval(""$code""); <br />?> <br /></div></p>
<p>提交 http://www.site.cn/test.php?c=${${phpinfo()}}; phpinfo()就被执行。如果提交<br />http://www.site.cn/test.php?c=${${eval($_GET)}};&d=phpinfo();</p>
<p>这样的话,d后面的代码也被执行。<br /><br /><font color="#ff0000">解决方法:<br /></font><br />eval函数减弱了你的应用的安全性,因为它给被求值的文本赋予了太多的权力。强烈建议不要使用eval函数。</p>
頁:
[1]