php中eval函式的危害與正確禁用方法

2022-09-29 17:09:18 字數 1206 閱讀 6308

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。如果字串丟擲...