这是在我的网站上传“var.”内容的“file.txt”的网址:
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”将包含空格而不是正确的字符。
我怎么能解决它?谢谢!
答案 0 :(得分:2)
尝试编码
mb_convert_encoding($file, 'HTML-ENTITIES', "UTF-8");
答案 1 :(得分: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('...');
}
+
如果文字+
出现在网址的QS部分,则会根据标准RFC behaviour将其转换为空格。
如果值为hello+world
,则必须编码为:
stringData=hello%2Bworld
答案 2 :(得分:0)
亲爱的,我已经使用%2B而不是&#34; +&#34;符号
修复漏洞是否正确?
<?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);
?>