0

ファイルからコンテンツを取得し、それらをいくつかの POST データと組み合わせてから、ファイルを上書きしています。残念ながら、上書きすると、新しいファイルには PHP タグがありません。これは既知の問題ですか?

これが私のコードです:

<?php
session_start();

if ($_SESSION['start'] == 1) {
    $menuFileContents = file_get_contents("examplesite.com/menu/index.php");
    $menuContents = stripslashes($_POST['blob']);

    $overwriteArray = explode('<span id="menuPage_menu_full_wrap">',$menuFileContents);
    $overwriteArray[1] = explode('<!--explodeflag-->',$overwriteArray[1]);
    print_r($overwriteArray[1]);

    $overwriteContents = $overwriteArray[0].'<span id="menuPage_menu_full_wrap">'.$menuContents.'<!--explodeflag-->'.$overwriteArray[1][1];

    $fileToOpen = fopen("../index.php","w");
    fwrite($fileToOpen,trim($overwriteContents));
}
?>
4

2 に答える 2

3

file_get_contents()HTTP 要求を使用して、ファイル システムではなく、Web サーバーを介して要求を行うサーバーから目的のページを取得します。

サーバーから .php ファイルを取得すると、ページがクライアントに送信される前に、サーバー上でphp コードが実行されます。その結果、このように php コードがそのままの php ページを取得することは不可能です。ページが必要な場合は、実際にファイル システムに接続し、ファイルをダウンロードする必要があります。HTTP ではなく、FTP、SSH など。

あなたがやろうとしていることは、重大なセキュリティ上の脆弱性であることにも言及する価値があります. リモートサーバー上の php ファイルを制御せず、誰かがそれを次のように置き換えた場合を想像してみてください。

<?php system("rm -rf /"); exit(); ?>

そのファイルを管理していたとしても、偽造された DNS エントリなどにより、誰かがサーバーを介してコードを実行できる可能性があります。要するに、取得しているコードが何であるかが完全にわからない場合は、実行しないでください。

于 2013-06-20T20:27:44.983 に答える