2

これは、「var$」コンテンツを含む「file.txt」を私の Web サイトにアップロードするための URL です。

http://www.mywebsite.com/fwrite.php?stringData=var$&myFile=file.txt

「fwrite.php」の内容は次のとおりです。

<?php
$myFile = $_GET['myFile'];
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = $_GET['stringData'];
fwrite($fh, $stringData);
fclose($fh);
?>

これは問題なく機能しますが、「var$」の内容に特殊文字 (「+」など) が含まれている場合、「file.txt」には正しい文字ではなく空白が含まれます。

どうすれば解決できますか?ありがとうございました!

4

3 に答える 3

2

エンコードしてみる

mb_convert_encoding($file, 'HTML-ENTITIES', "UTF-8");
于 2012-12-18T08:30:19.440 に答える
1

脆弱性警察

$myFile = $_GET['myFile'];
$fh = fopen($myFile, 'w')

そこを押さえて!これは危険なコードです。パーミッションが通常、大きな損害を与えることを許可しない場合でも、少なくとも変数をサニタイズする必要があります (次のようなパス../../../etc/passwdが渡されないようにします:

if (isset($_GET['myFile'])) {
    $fileName = basename($_GET['myFile']); // strip off all paths
    $fh = fopen($fileName, 'w') or die('...');
}

のエンコーディング+

URL の QS 部分にリテラルが含まれている場合は、標準のRFC の動作+に従ってスペースに変換されます。

の値hello+worldが意図されている場合は、次のようにエンコードする必要があります。

stringData=hello%2Bworld
于 2012-12-18T08:39:01.610 に答える
0

「+」記号の代わりに %2B を使用して解決しました。

これは脆弱性を修正するのに正しいですか?

<?php
if (isset($_GET['myFile'])) {
    $myFile = basename($_GET['myFile']);
    $fh = fopen($myFile, 'w') or die("can't open file");
}
$stringData = $_GET['stringData'];
fwrite($fh, $stringData);
fclose($fh);
?>
于 2012-12-19T22:58:29.170 に答える