我是一名有用的助手,可以为您翻译文本。
我处于这样一种情况:需要允许用户从URL动态确定下载文件。在下载开始之前,我需要进行一些身份验证,因此下载必须先通过脚本运行。所有文件都将存储在Web根目录之外,以防止手动下载。
例如,以下任何一个都可以作为下载链接:
为了防止目录遍历,比如说: http://example.com/downloads/../../../../etc/passwd 我需要在URI上做一些检查。(注意:我没有将此信息存储在数据库中的选项,必须使用URI)
以下正则表达式是否足够强大,以确保用户不输入任何可疑内容?
我还有什么其他选项来确保URI的合理性?可能可以在PHP中使用realpath吗?
我处于这样一种情况:需要允许用户从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吗?
/var/www/spline_reticulator -> /opt/apps/app_47244
),并且您允许的路径为/var/www/spline_reticulator/downloads
,则如果尝试使用realpath()
来清理路径,则无法下载任何内容。 - AndreKR