3

以下のコードを使用して、クラスを自動的にロードして宣言しているので、クラスファイルをclassesという名前のフォルダーに配置するだけで済みます。spl_autoload_regsister()の部分は不要に思えるかもしれませんが、エラーなしでWordPressプラグインとして機能する必要があります。

それは使用してeval()おり、使用について話している非常に多くのWebページeval()が悪く、セキュリティホールを作成する可能性があるのを見てきました。では、これはどのように危険でしょうか?

$strDirPath = dirname(__FILE__) . '\\classes\\';
$arrClassFiles = array_map(create_function( '$a', 'return basename($a, ".php");' ), glob($strDirPath . '*.php'));
spl_autoload_register(
    create_function('$class_name', '
        global $arrClassFiles, $strDirPath;
        if (in_array($class_name, $arrClassFiles)) 
            include($strDirPath . $class_name . ".php");' )
);

foreach ($arrClassFiles as $strClassName) {
    $strClassName_alpha = $strClassName . "_Alpha";
    eval("class $strClassName_alpha extends $strClassName {};");    
}

print_r(get_declared_classes());    

たぶん、誰かがphpコードのファイル名をフォルダに入れることができますか?しかし、それがシステムを危険にさらす可能性があるとは思いません。

4

2 に答える 2

6

彼らがクラスファイルにのような名前を付けるrandomclass {}; echo $db_password;//.phpことができれば、コード実行攻撃を受ける可能性があります。

これは有効なファイル名ではないと確信していますが、有効な悪意のある入力を作成するのは私よりはるかに賢い人がいます。

より良いコード構造で回避することが事実上常に可能であることを考えると、それは通常、あなたが自分自身を開く必要がある攻撃対象領域ではありません。

于 2012-09-04T00:21:49.423 に答える
2

エラー状態が処理された場合、ここでは問題は発生しません。

誰かが存在する別のクラスを呼び出そうとした場合(つまり、ここでは有効なコードですが、システムの制限をバイパスするため、ハッカーを直接実行したくない場合)、勝ったことを確認してください。セキュリティ上の問題ではありません。または、このコンテキストからそのクラスを実行することはまったく不可能です。

念のため、「class」という単語やその他のキーワード、組み込みのクラス名、組み込みの関数名、その他の組み込みなどを使用してコードを実行しようとする試みを拒否してください。問題はないはずですが、おそらくそうではありません。エラーが発生する可能性があるため、ここでの特定のケースでは必要ありません。

于 2012-09-04T00:18:47.907 に答える