0

データベースのテキスト フィールドから php コードを実行するための bb コード オプションを作成しようとしています。何かのようなもの[?php]code[/?]

安全ではないことはわかっていますが、誰もページを編集することはできません。主に、物事を計算したり、ファイルを含めたりするために使用したいと考えています。

これは私がソファを持っているものです:

$txt = preg_replace("#\[?php\](.+?)\[/?\]#is", eval("\\1"), $txt);
4

2 に答える 2

0

あなたが提供した例は、eval()前に評価として機能せずpreg_replace()、結果は実際に置換として使用されます。\\1は有効な PHP 式ではないため、指定されたコードが解析エラーを返すことを期待しています。

最初に を使用preg_match()して PHP 式を抽出し、次にeval()それを抽出してから、bb タグ間のテキストをeval().

とはいえ、上でコメントしたように、私は個人的にそのようなことをすることを強くお勧めしません. これは基本的にサーバーへの任意のアクセスを提供するものであり、どのような点でも非常に悪い設計思想です。特定のディレクトリからページを含めるなど、実際には特定の数の操作のみが必要だと思います。すべての予防措置を講じて、限られた数の操作専用の専用 bb タグを実装できます。

于 2013-07-06T14:32:01.733 に答える
0

eval最初にバッファリング、文字列全体、php タグの終了を開始し、バッファを変数として取得できます。

$txt = "Result of 2+2 = [?php] echo 4; [/?].";

$txt = str_replace(array('[?php]', '[/?]'), array('<?php','?>'), $txt);
ob_start();
eval('?>'.$txt);
$txt = ob_get_contents();
ob_end_clean();

echo $txt;
于 2013-07-06T17:23:48.407 に答える