0

template.phpたとえば、大量のhtmlと少しのphpコードを含むファイルがあるとします。

...
<body>
    <div class="content">
        <?php echo $content; ?>
    </div>
</body>
...

ファイルの内容をテキスト(phpコードを含む)として読み取り、ユーザーがテンプレートを編集できるようにテキストエリアに出力したいと思います。file_get_contentsを使用してこれを実現し、を使用してレンダリングしようとしてhtmlspecialcharsいますが、ファイルから読み取るとphpコードが実行されるようです。この状況でphpコードの解釈と実行を回避する方法は?グーグルは役に立たなかった、多分私は十分に一生懸命に努力していない。任意のヒント?ありがとう!

編集:わかりました、問題を解決しました。問題は、ファイルシステムパスの代わりにファイルへのURLパスを渡していたことでした。file_get_contentsこれにより、すべてのphpコードが削除され、無視されたようです(?)。ヒントをありがとう

4

1 に答える 1

1

file_get_contentsURL を指定してリモート サーバー上のファイルを編集しようとしている場合を除き、PHP コードは実行されません。その場合、リモート サーバーから取得するのは、ソースではなく、実行された PHP コードになります。

ローカル ファイルを編集するか、特定の PHP ファイルのコードを送り返す「バックドア」を提供する必要があります。これはセキュリティ違反であるため、注意してください。だれでも PHP のソース コードを読み取る可能性があります。

これを回避する方法は、ファイルが特定のディレクトリにある場合にのみ、ファイルの提供を受け入れることです。もう1つは、ファイルの内容を確認することです。

<?php

    // This file will read any local PHP file (or any file of any kind,
    // returning it as text), provided they contain a written agreement
    // to be read.
    if (!isset($_REQUEST['file']))
        die("ERROR: no file supplied");
    $path = $_REQUEST['file'];
    if (!is_readable($path))
        die("ERROR: file is not readable");
    $content = file_get_contents($path);
    if (false === strpos($content, "IT IS OK TO READ THIS FILE AS SOURCE"))
        die("ERROR: this file is not authorized");
    if (false !== strpos($content, "IT IS NOT OK TO READ THIS FILE AS SOURCE"))
        die("ERROR: this file is not authorized");
    Header("Content-Type: text/plain");
    Header("Content-Length: " . strlen($content));
    die($content);
?>

ファイルを読み取れるようにするには、ファイル自体に次のような宣言が含まれている必要があります。

// IT IS OK TO READ THIS FILE AS SOURCE

また、反対の意味の宣言を含めてはなりません。

于 2012-09-06T16:32:49.020 に答える