fwrite()和特殊字符

时间:2012-12-18 08:28:46

标签: php

这是在我的网站上传“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”将包含空格而不是正确的字符。

我怎么能解决它?谢谢!

3 个答案:

答案 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);
?>