如何在PHP中转义输入?

ici*_*lik 1 php escaping file

我有一个PHP页面接受来自表单帖子的输入,但不是将该输入定向到数据库,而是用于从文件系统中检索文件.什么是转义目标为文件系统而不是数据库的字符串的好方法?mysql_real_escape_string()是否合适?

Mar*_*c B 6

如果您使用用户提供的输入来指定文件名目录,则必须确保提供的文件名/路径不会试图突破您网站的操场.

例如,有类似的东西

readfile($_GET['filepath']);
Run Code Online (Sandbox Code Playgroud)

将在您的服务器上发送任何攻击知道其路径的内容.甚至像

readfile('/path/to/your/site/download/' . $_GET['filepath']);
Run Code Online (Sandbox Code Playgroud)

如果用户指定足够的'../../../'来获取他们想要的任何文件,则完成相同的操作.

mysql_real_escape_string()适用于此,因为您没有进行数据库操作.使用适当的工具进行适当的工作 愚蠢的方式,m_r_e_s()是一个香蕉,你需要一只长颈鹿.就像是

readfile('/path/to/your/site/download/' . basename($_GET['filepath']));
Run Code Online (Sandbox Code Playgroud)

将相对保存,因为basename()将仅提取用户提供的文件的文件名部分,因此即使它们传入../../../../../etc/passwd,basename也只会返回passwd.