0

HTML と PHP コードを含むファイル「xxx.php」があります。私が使用するinclude("xxx.php");と、それは問題なく、期待どおりに機能します。しかし、 include を使用できないが を使用できるシステムを開発していますfile_get_contents()

問題は、echo file_get_contents("xxx.php") を実行すると、PHP を解釈せずにソース コード全体が表示されることです。

そこで私は多くの調査を行いeval()、PHP コードを実行するために使用できることを発見しました。問題は、「xxx.php」に php と HTML コードがあることです。私は試した:

eval(file_get_contents("xxx.php"));

ただし、HTML は表示されません。xxx.php の例:

<?php
echo "HELLO";
?>
<b>HELLO BOLD</b>
<?php
echo "BYE";
?>

問題は、eval で HELLO! が表示されないことです。

4

3 に答える 3

2

"?>\n"評価する前に、(HTML モードに入るために) PHP コードの先頭に追加します。

eval("?>\n" . file_get_contents("xxx.php"));

また、CMS のセキュリティ問題を修正して、スクリプト キディの攻撃をかわすためにそのような思い切った手段に訴える必要がないようにします。

于 2013-07-24T20:05:33.003 に答える
2

echo file_get_contents()コードを表示することが期待されます。f_g_c() は取得したものを実行しません。ディスクからバイトを丸呑みし、それらを文字列として返すだけです。そのため、 が必要eval()です。

同様に、eval()コーディングするときは、区切り文字を含めないでください。<?php例えば

php > eval('2+2;'); // no return, no echo, so no output
php > eval('echo 2+2;');
4
php > eval('<?php echo 2+2;');
PHP Parse error:  syntax error, unexpected '<' in php shell code(1) : eval()'d code on line 1
php >

コメントのフォローアップ:

<?phpeval にフィードするものはすべて、魔法のように開始タグが適用された通常の PHP スクリプトであるかのように扱います。

php > eval('?> foo <?php echo 2+2;');
 foo 4

eval ブロッ​​クで最初に PHP モードを終了すると、本格的な PHP スクリプトと同じように、eval はそのテキストを通常の出力として扱います。

于 2013-07-24T19:55:46.353 に答える
0

愛のために<insert diety here>これをしないでください....しかし<?php、評価の先頭からを削除する必要があるため、コードは失敗しています。

Eval は php コードを想定しているため、<?phpand?>は想定どおりです。

ここで行っていることは、サイトを保護することではなく、ハッキングを容易にすることです。

于 2013-07-24T19:55:24.520 に答える