Php 创建一个名为用户的文件夹';s输入

Php 创建一个名为用户的文件夹';s输入,php,filesystems,Php,Filesystems,在PHP中,我需要使用用户的输入作为文件夹的标题 例如: $foldername = $_REQUEST["foldername"]; mkdir("./userfolders/".$foldername); 因为,我看到的一个问题是,输入可能包含“./”,这将导致文件夹写入父目录,我不希望这样。我的解决方案是str\u replace删除字符串中的所有前斜杠 是否有我遗漏的任何其他漏洞?理想的方法是在IMO中根本不接受用户输入。除了取决于文件系统的其他漏洞(例如,Windows的反斜杠怎么样

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

例如:

$foldername = $_REQUEST["foldername"];
mkdir("./userfolders/".$foldername);
因为,我看到的一个问题是,输入可能包含“./”,这将导致文件夹写入父目录,我不希望这样。我的解决方案是
str\u replace
删除字符串中的所有前斜杠


是否有我遗漏的任何其他漏洞?

理想的方法是在IMO中根本不接受用户输入。除了取决于文件系统的其他漏洞(例如,Windows的反斜杠怎么样?)之外,您可能会遇到其他问题,如字符集问题-想想
♥♥♥♥♥♥♥♥♥♥♥,例如:它是一个完全有效的UTF-8字符串

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


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

是否可以对文件夹名称变量使用
urlencode
函数。 向用户显示文件夹时,可以使用
urldecode

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

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