作者:phpeval
前段時間一個程序出的問題。就和這差不多。
對于上面的代碼。如果在URL提交http://www.phpeval.cn/test.php?c=phpinfo(); 就可以發現phpinfo()被執行了。而相應的提交c=echo 11111; 發現1111也被輸出了。這個代碼被執行了。
(好些PHP的代碼在寫文件的時候。都沒有注意到這一點。他們在代碼中寫php的文件的時候。把代碼加在雙引號之內。然后過濾掉雙引號。認為這樣就不能執行了。實際上是可以的。)
還有一些利用方式,比如:
提交 http://www.site.cn/test.php?c=${${phpinfo()}}; phpinfo()就被執行。如果提交
http://www.site.cn/test.php?c=${${eval($_GET[d])}};&d=phpinfo();
這樣的話,d后面的代碼也被執行。
解決方法:
eval函數減弱了你的應用的安全性,因為它給被求值的文本賦予了太多的權力。強烈建議不要使用eval函數。