我有这个小的PHP脚本,它接受POST变量并将其写入文件。PHP字符串中的百分号
<?php
$fileContents = $_POST["Contents"];
$fileName = $_POST["Name"];
$filePath = $_POST["Path"];
$passcode = $_POST["Passcode"];
if ($passcode != "<passcode>")
die();
if (!is_dir("./upload/$filePath"))
mkdir("./upload/$filePath", 0755, true);
$file = "./upload/$filePath" . $fileName;
$fd = fopen($file, "w");
fwrite($fd, $fileContents);
fclose($fd);
?>
这似乎是工作的罚款给大多数文本,但在给出包含一个百分号(%)文本的情况下,下面的怪胎出现:
fivice = getField(%bind, 0);
原文是:
%device = getField(%bind, 0);
我返回以下服务器要求POST请求:
POST path/to/Upload.php HTTP/1.1\nHost: host.com\nContent-Type: application/x-www-form-urlencoded\nContent-Length: <length>\n\n<file data>\n
在许多其他情况下也会出现这种情况,但正如您所看到的,不是使用%绑定。
我找的这个原因,并发现%%的东西,所以我尝试了%% - 逃避者,并得到这个:
%fivice = getField(%%bind, 0);
有什么办法来解决这个问题%?另外,%问题是一个PHP问题或请求问题?
编辑:我试过使用urlencode/urldecode但这些都没有解决问题。这也发生在file_put_contents
,所以我开始认为这是一个上传问题。
1.-您正在使用POST变量,没有任何过滤器和测试。 2.什么是getField? – 2012-03-26 20:02:55
此脚本是**严重**安全隐患。 – Halcyon 2012-03-26 20:05:11
@FritsvanCampen:我在其中实现了一个密码,请参阅编辑。它可能不是最安全的事情,但现在我只需要这些。 – 2012-03-26 20:20:52