创建一个标题为用户输入的文件夹

时间:2012-12-10 08:40:35

标签: php filesystems

在PHP中,我需要使用用户的输入作为文件夹的标题。

例如:

$foldername = $_REQUEST["foldername"];
mkdir("./userfolders/".$foldername);

因为,我看到的一个问题是输入可能包含“../”,这会导致文件夹被写入父目录,这是我不想要的。我对此的解决方案是str_replace远离字符串中的所有正斜杠。

我错过了其他任何漏洞吗?

2 个答案:

答案 0 :(得分:1)

理想的方法是不接受所有IMO的用户输入。除了取决于文件系统的其他漏洞(例如Windows的反斜杠?),你可能遇到其他问题的世界,如字符集问题 - 想想♥♥♥♥♥♥♥♥♥♥♥,例如:它是一个完全有效的UTF- 8弦......

如果您手头有数据库,更安全的方法是在那里存储用户输入,并在数据库记录的唯一ID之后命名目录。

如果这不切实际:我一直喜欢的一个可接受的妥协是urlencode()用户输入,这将保证您不会在文件系统中遇到有问题的字符。您仍然需要清楚使用哪种编码(否则您之后使用的urldecode()将显示目录名称将返回损坏的数据),否则,这应该可以正常工作。以这种方式创建的目录也可以通过浏览器访问,因为URL中的特殊字符无论如何都会得到urlencode()

答案 1 :(得分:1)

是否有可能在文件夹名称变量上使用urlencode功能。 向用户显示文件夹后,您可以使用urldecode

$foldername = urlencode($_REQUEST["foldername"]);
mkdir("./userfolders/".$foldername);

// Show folder name
echo urldecode($foldername);