2

这是在我的网站上上传带有“var$”内容的“file.txt”的 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 回答