Lar*_*ars 0 perl filenames sanitization
代码'if(-e"filename")'测试在包含该代码的脚本的目录中是否存在具有名称filename的文件.
怎么做名字检查?Perl的?操作系统?Bash on POSIX-os?
'if(-e"cat string")'会在Linux上执行cat命令吗?
我想知道为了能够避免不需要的文件访问,如"../file"将访问父目录中的文件.
要分享我的支票代码:
if($folder =~ m/$([\\]?\.[\\]?\.|[\\]?\\|[\\]?\/|[\\]?\?|[\\]?*|[\\]?:|[\\]?\||[\\]?\"|[\\]?\<|[\\]?\>)^|$([\\]?\.[\\]?\.|[\\]?\\|[\\]?\/|[\\]?\?|[\\]?*|[\\]?:|[\\]?\||[\\]?\"|[\\]?\<|[\\]?\>)\/|\/([\\]?\.[\\]?\.|[\\]?\\|[\\]?\/|[\\]?\?|[\\]?*|[\\]?:|[\\]?\||[\\]?\"|[\\]?\<|[\\]?\>)\/|\/([\\]?\.[\\]?\.|[\\]?\\|[\\]?\/|[\\]?\?|[\\]?*|[\\]?:|[\\]?\||[\\]?\"|[\\]?\<|[\\]?\>)^|\$'[^']*'/)
{
#error
}
Run Code Online (Sandbox Code Playgroud)
更新正则表达式:
if($folder =~ m/(\/|\\)|$([\\]?\.[\\]?\.^|$[\\]?(\*|\?)^|\$'[^']*'/)
{
#error
}
Run Code Online (Sandbox Code Playgroud)
说明:$ folder必须是纯文件名.如果它包含Windows或POSIX路径分隔符或是(任何转义的)父目录返回链接或是(任何转义)通配符(因为它匹配第一个匹配的文件并至少在Mac OS X上返回true)或包含C ANSI转义任何地方的序列,信号错误 其他任何东西,即使不合法或阴暗,也应该简单地返回"文件不存在",因此可以提供给'if(-e $文件夹)'.
归档时间: |
|
查看次数: |
123 次 |
最近记录: |