opendir(DIR,"$pwd") or die "Cannot open $pwd\n";
my @files = readdir(DIR);
closedir(DIR);
foreach my $file (@files) {
next if ($file !~ /\.txt$/i);
my $mtime = (stat($file))[9];
print $mtime;
print "\n";
}
Run Code Online (Sandbox Code Playgroud)
基本上我想要记下目录中所有txt文件的时间戳.如果有一个子目录,我也想在该子目录中包含文件.
有人可以帮我修改上面的代码,以便它也包含子目录.
如果我在windows中使用下面的代码我获取文件夹中所有文件的时间戳,甚至在我的文件夹之外
my @dirs = ("C:\\Users\\peter\\Desktop\\folder");
my %seen;
while (my $pwd = shift @dirs) {
opendir(DIR,"$pwd") or die "Cannot open $pwd\n";
my @files = readdir(DIR);
closedir(DIR);
#print @files;
foreach my $file (@files) {
if (-d $file and !$seen{$file}) {
$seen{$file} = 1;
push @dirs, "$pwd/$file";
}
next if ($file …Run Code Online (Sandbox Code Playgroud) 我在PHP中实现了一个简单的目录列表脚本.
我想确保传递的路径在打开目录句柄和echo结果之前是安全的.
$f = $_GET["f"];
if(! $f) {
$f = "/";
}
// make sure $f is safe
$farr = explode("/",$f);
$unsafe = false;
foreach($farr as $farre) {
// protect against directory traversal
if(strpos($farre,"..") != false) {
$unsafe = true;
break;
}
if(end($farr) != $farre) {
// make sure no dots are present (except after the last slash in the file path)
if(strpos($farre,".") != false) {
$unsafe = true;
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是否足以确保用户发送的路径是安全的,还是我应该采取其他措施来防止攻击?
我正在编写一个应该处理许多小文件的程序,比如数千甚至数百万.我一直在测试500k文件的那一部分,第一步就是迭代一个目录,里面有大约45k目录(包括子目录的子目录等)和500k小文件.遍历所有目录和文件,包括获取文件大小和计算总大小大约需要6秒.现在,如果我尝试在遍历时打开每个文件并立即关闭它,它看起来永远不会停止.事实上,它需要太长时间(小时......).自从我在Windows上执行此操作后,我尝试使用CreateFileW,_wfopen和_wopen打开文件.我没有在文件上读或写任何东西,尽管在最后的实现中我只需要阅读.但是,我没有看到任何尝试都有明显的改善.
我想知道是否有一种更有效的方法来打开具有任何可用功能的文件,无论是C,C++还是Windows API,或者唯一更有效的方式是读取MFT并直接读取磁盘块,我我想避免?
更新:我正在处理的应用程序是使用版本控制进行备份快照.因此,它还具有增量备份.500k文件的测试是在一个巨大的源代码库上完成的,以便进行版本控制,就像scm一样.因此,所有文件都不在一个目录中.还有大约45k目录(如上所述).
因此,建议的压缩文件解决方案没有帮助,因为当备份完成时,就是访问所有文件的时候.因此,我认为没有任何好处,甚至会产生一些性能成本.
我有一个音乐目录,其中包含相册文件夹以及每个级别的单个歌曲.如何遍历所有这些以不同格式(mp3,wav等)编码的文件?另外有一种方法我可以将它们重命名为一种格式,使用正则表达式更符合我的喜好吗?
谢谢
我想example.com/page/../other-page在我的 IIS 网站中禁用目录遍历(甚至是真实页面)。我尝试过使用自定义响应进行请求过滤和 URL 重写。
微软文档中关于denyUrlSequences请求过滤的部分实际上使用了一个..例子:
以下示例
Web.config文件将拒绝对三个 URL 序列的访问。第一个序列防止目录遍历,[...]Run Code Online (Sandbox Code Playgroud)<configuration> <system.webServer> <security> <requestFiltering> <denyUrlSequences> <add sequence=".." /> [...]
……但这不起作用;在拒绝规则运行之前example.com/page/../other-page就已经变成了。您可以通过为和 访问example.com/other-page设置拒绝规则来证明这一点。规范化路径被规则阻止,但在原始状态下不会匹配。page/subexample.com/page/./sub-page
我已经在 IIS v7.5 和 v10 上对此进行了测试,我想它也存在于每个中间版本中。
..,./, 和//互联网搜索只想告诉我有关旧版本 IIS 中大约 2000 年的漏洞,或者如何启用带点的 MVC 路由。
调试注意:如果您用来curl测试此行为,请确保添加该--path-as-is选项,这样它就不会在客户端中进行标准化。一些浏览器似乎也在进行客户端标准化。
使用说明:我名义上试图关闭,example.com/clubs-baby-seals/../about-us以免有人将链接的成功加载视为对海豹虐待的认可。
我正在从http://www.perlmonks.org/index.pl?node_id=217166转换linux脚本,具体如下:
#!/usr/bin/perl -w
use strict;
use Getopt::Std;
use File::Find;
@ARGV > 0 and getopts('a:', \my %opt) or die << "USAGE";
# Deletes any old files from the directory tree(s) given and
# removes empty directories en passant.
usage: $0 [-a maxage] directory [directory ...]
-a maximum age in days, default is 120
USAGE
my $max_age_days = $opt{a} || 120;
find({
wanted => sub { unlink if -f $_ and -M _ > $max_age_days },
postprocess => sub { …Run Code Online (Sandbox Code Playgroud) 我处于这样一种情况,我需要允许用户下载从URL动态确定的文件.在下载开始之前,我需要进行一些身份验证,因此下载必须先通过脚本运行.所有文件都将存储在Web根目录之外,以防止手动下载.
例如,以下任何一个都可以是下载链接:
基本上,文件夹深度可以变化.
为了防止目录遍历,比如说:http: //example.com/downloads/../../../../etc/passwd 我显然需要对URI进行一些检查.(注意:我没有选择将此信息存储在数据库中,必须使用URI)
以下正则表达式是否可以确保用户不输入可疑内容:
preg_match('/^\/([-_\w]+\/)*[-_\w]+\.(zip|gif|jpg|png|pdf|ppt|png)$/iD', $path)
Run Code Online (Sandbox Code Playgroud)
我有什么其他选择来确保URI是理智的吗?可能在PHP中使用realpath?
我有/a/b一个用户可读的文件A。但/a不提供由 的可执行权限A,因此路径/a/b无法遍历/a。对于任意长的路径,由于用户无法访问中间路径,我将如何确定无法访问给定路径的原因?
有没有办法在我的网站上获取所有.aspx文件?也许迭代网站的文件结构并添加到数组?
如何递归扫描Android中的目录并显示文件名?我正在尝试扫描,但它很慢(强制关闭或等待).我正在使用在这个问题FileWalker的单独答案中给出的课程.
perl ×2
php ×2
android ×1
asp.net ×1
c++ ×1
directory ×1
file-io ×1
filesystems ×1
find ×1
iis ×1
iis-10 ×1
java ×1
linux ×1
ntfs ×1
performance ×1
permissions ×1
python ×1
security ×1
user-input ×1
windows ×1