-1

変数などを設定するためにユーザーが提供する$_POSTまたは$_GETを介して指定された変数を使用して、.phpファイルにfwriteする方法を理解しようとしています。したがって、以下のコードを機能させるにはどうすればよいでしょうか。コードを作成する代わりに、たとえば$ _GET変数を挿入するか、以下の説明に$derpを挿入します。

<?php
$derp = "working!";
$something = '<?php echo "Well Thats {$derp}' ?>';
$file = fopen("worked.php","w");
if (fwrite($file,$something) > 0) {
echo "Fwrite Successful!";  
}
fclose($file);
?>
4

1 に答える 1

0

このユースケースは非常に奇妙に見えますが、次のように機能するはずです。

$data = array('<?php');
foreach ($_REQUEST as $key => $value) {
    $data[] = "\$$key = \"$value\";";
}
$data[] = '?>';

$data = join("\n", $data);
file_put_contents('/path/to/file.php', $data);

注意:このコードはいくつかのセキュリティリスクを課します。

WTFはここで起こっていますか?

上記のコードは、$_GET$_POST、を組み合わせたすべての配列要素を反復処理します。
それによって、ファイルに書き込まれる行の配列を作成します。
次に、この配列はjoin()、NEWLINEascii文字を接着剤として使用して文字列に変換されます。

このスクリプトが次のクエリ文字列で呼び出されると仮定します。

?foo=bar&bar=baz

この場合、ファイル/path/to/file.phpには(file_put_contents)が含まれます。

<?php
$foo = "bar";
$bar = "baz";
?>

上記の例では、のようなネストされたクエリパラメータはサポートされていませんfoo[bar]=baz

于 2012-11-07T20:17:11.473 に答える