当前位置:  开发笔记 > 编程语言 > 正文

防止使用面向Web的应用程序进行目录遍历 - 正则表达式是防弹吗?

如何解决《防止使用面向Web的应用程序进行目录遍历-正则表达式是防弹吗?》经验,为你挑选了1个好方法。

我处于这样一种情况,我需要允许用户下载从URL动态确定的文件.在下载开始之前,我需要进行一些身份验证,因此下载必须先通过脚本运行.所有文件都将存储在Web根目录之外,以防止手动下载.

例如,以下任何一个都可以是下载链接:

http://example.com/downloads/companyxyz/overview.pdf

http://example.com/downloads/companyxyz/images/logo.png

http://example.com/downloads/companyxyz/present/ppt/presentation.ppt

基本上,文件夹深度可以变化.

为了防止目录遍历,比如说:http: //example.com/downloads/../../../../etc/passwd 我显然需要对URI进行一些检查.(注意:我没有选择将此信息存储在数据库中,必须使用URI)

以下正则表达式是否可以确保用户不输入可疑内容:

preg_match('/^\/([-_\w]+\/)*[-_\w]+\.(zip|gif|jpg|png|pdf|ppt|png)$/iD', $path)

我有什么其他选择来确保URI是理智的吗?可能在PHP中使用realpath?



1> Emil H..:

我建议使用realpath()将路径转换为绝对路径.然后,您可以将结果与允许目录的路径进行比较.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有