2011-04-21 42 views
1

Webサーバーでeval()が無効または有効になっていることを知る方法PHPコードはこれを知るために何か?サーバーで無効になっている場合、PHPコードを有効にするかどうかphp eval function

+0

eval( "echo 'Hello World!';"); あなたは行き​​ます。 –

+0

典型的なsafe_modeの制限は 'exec'とcoに影響します。しかし、 'eval'は通常ブロックされません。とにかく、 'include(.. file_put_contents(" tmp "、...))'を使って回避することができます。 – mario

答えて

5

PHPには何も組み込まれていないため、評価を無効にすることはできません(無効にできる他の機能とは異なります)。

しかし、Suhosinと呼ばれるPHP用のセキュリティパスをインストールすると、evalを無効にしたり、PHPに他のセキュリティ機能を追加することができます。

http://www.hardened-php.net/suhosin/configuration.html#suhosin.executor.disable_eval

+0

['eval'は言語構造である](http://www.php.net/manual/en/function.eval.php#refsect1-function.eval-notes)として私はあなたに同意するつもりです。これが 'eval'を無効にする唯一の方法であれば、' 'ini_get'](http://www.php.net/manual/en/function.ini-get.php)でチェックすることができます。 –

5

eval()がで存在しているかどうかを判断することができるはずです:

http://php.net/manual/en/function.function-exists.php

if (function_exists('eval')) { 
    echo "eval() exists, it does it does!"; 
} 

EDIT

は実際には、eval()は言語construですctであるため、function_exists()を使用してテストすることはできません。しかし、これは動作するはずです:

<?php 

$isevalfunctionavailable = false; 

$evalcheck = "\$isevalfunctionavailable = true;"; 

eval($evalcheck); 

if ($isevalfunctionavailable === true) { 
    echo "\$isevalfunctionavailable is true.\n"; 
    echo var_dump($isevalfunctionavailable); 
} 

?> 

http://codepad.org/6xg2tO1K

+1

'eval'は言語構造であるため、これは常に失敗します。それは 'function_exists(" foreach ")' – mario

+0

@marioのテストと似ています - あなたが正しいです。それらの厄介な言語構造! :P –

+0

@mario - 私の編集はどうですか? –

3

さて、言ったように、evalを無効にすることはほとんどありません。

$eval = create_function("", "$code"); 
$eval(); 

あるいは単に:

assert_options(ASSERT_ACTIVE, 1); 
assert_options(ASSERT_QUIET_EVAL, 1); 
assert("$code"); 

とファイルシステム-回避策:

file_put_contents($tmp=tempnam("/tmp", "EVAL"), "$code"); 
include($tmp); 

ストレートにevalにすべての作業と同等しかし、念のために、3つの回避策があります。