php的eval函式並不是系統元件函式,因此我們在php.ini中使用disable_functions是無法禁止它的。
但是eval()對於php安全來說具有很大的殺傷力,因此一般不用的情況下為了防止類似如下的一句話木馬入侵,需要禁止!
<?php eval($_post[cmd]);?>
www.cppcns.comeval()使用範例:
<?php $string = '杯子';
$name = '咖啡';
$str = '這個 $string 中裝有 $name.
';echo $str;
eval( "$str = "$str";" );
echo $str;
?>
本例的傳回值為:
nfvdzahp這個 $string 中裝有 $name.
這個 杯子 中裝有 咖啡.
或更高階點的是:
<?php $str="hello world"; //比如這個是元算結果
$code= "print('n$strn');";//這個是儲存在資料庫內的php**
echo($code);//列印組合後的命令,str字串被替代了,形成乙個完整的php命令,但並是不會執行
eval($code);//執行了這條命令
?>
對於上面的咖啡的例子,在eval裡面,首先字串被替換了,其次替換完後形成乙個完整的賦值命令被執行了.
這類小馬砸門的情況是需要禁止掉的!
然而網上很多說使用disable_functions禁止掉eval的方法都是錯誤的!
其實eval()是無法用php.ini中的disable_functions禁止掉的 :
because eval() is a language construct and not a function
eval是zend的,因此不是php_function 函式;
那麼php怎麼禁止eval呢?
如果想禁掉eval可以用php的擴充套件 suhosin:
安裝suhosin後在php.ini中load進來suhosin.so,再加上suhosin.executor.disable_eval = on即可!
總結,php的eval函式在php中是無法禁用的,因此我們也只有使用外掛程式了!
本文標題: php中eval函式的危害與正確禁用方法
本文位址: /wangluo/php/110110.html
php中eval函式的危害與正確禁用方法
php的eval函式並不是系統元件函式,因此我們在php.ini中使用disable functions是無法禁止它的。但是eval 對於php安全來說具有很大的殺傷力,因此一般不用的情況下為了防止類似如下的一句話木馬入侵,需要禁止!1 eval post cmd eval 使用範例 1 2 3 4...
關於PHP中eval函式的返回值
關於eval 的概念就是把字串作為php 執行。但是關於其返回值,有時候容易出錯。如下面定義乙個函式 function get func type 你能正確說出例1,例2,例3的執行結果嗎?例1 p eval get func type trace p 例2 p eval return get fu...
javascript中的eval函式
eval 只有乙個引數,如果傳入的引數不是字串,則直接返回這個引數。否則會將字串當成js 進行編譯,如果編譯失敗則丟擲語法錯誤 syntaxerror 異常。如果編譯成功則開始執行這段 並返回字串中的最後乙個表示式或語句的值 如果最後乙個表示式或語句沒有值,則最終返回undefined。如果字串丟擲...