标签: directory-traversal

如何遍历目录中的所有文件; 如果它有子目录,我也想遍历子目录中的文件

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)

perl directory-traversal

8
推荐指数
2
解决办法
2万
查看次数

确保用户定义的路径在PHP中是安全的

我在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)

这是否足以确保用户发送的路径是安全的,还是我应该采取其他措施来防止攻击?

php security user-input directory-traversal

7
推荐指数
1
解决办法
2120
查看次数

在NTFS上打开许多小文件太慢了

我正在编写一个应该处理许多小文件的程序,比如数千甚至数百万.我一直在测试500k文件的那一部分,第一步就是迭代一个目录,里面有大约45k目录(包括子目录的子目录等)和500k小文件.遍历所有目录和文件,包括获取文件大小和计算总大小大约需要6秒.现在,如果我尝试在遍历时打开每个文件并立即关闭它,它看起来永远不会停止.事实上,它需要太长时间(小时......).自从我在Windows上执行此操作后,我尝试使用CreateFileW,_wfopen和_wopen打开文件.我没有在文件上读或写任何东西,尽管在最后的实现中我只需要阅读.但是,我没有看到任何尝试都有明显的改善.

我想知道是否有一种更有效的方法来打开具有任何可用功能的文件,无论是C,C++还是Windows API,或者唯一更有效的方式是读取MFT并直接读取磁盘块,我我想避免?

更新:我正在处理的应用程序是使用版本控制进行备份快照.因此,它还具有增量备份.500k文件的测试是在一个巨大的源代码库上完成的,以便进行版本控制,就像scm一样.因此,所有文件都不在一个目录中.还有大约45k目录(如上所述).

因此,建议的压缩文件解决方案没有帮助,因为当备份完成时,就是访问所有文件的时候.因此,我认为没有任何好处,甚至会产生一些性能成本.

c++ windows performance ntfs directory-traversal

7
推荐指数
1
解决办法
3538
查看次数

如何循环遍历文件并在Python中重命名它们

我有一个音乐目录,其中包含相册文件夹以及每个级别的单个歌曲.如何遍历所有这些以不同格式(mp3,wav等)编码的文件?另外有一种方法我可以将它们重命名为一种格式,使用正则表达式更符合我的喜好吗?

谢谢

python filesystems directory-traversal

5
推荐指数
1
解决办法
2856
查看次数

了解 IIS 中的路径规范化

我想example.com/page/../other-page在我的 IIS 网站中禁用目录遍历(甚至是真实页面)。我尝试过使用自定义响应进行请求过滤和 URL 重写。

微软文档中关于denyUrlSequences请求过滤的部分实际上使用了一个..例子:

以下示例Web.config文件将拒绝对三个 URL 序列的访问。第一个序列防止目录遍历,[...]

<configuration>
   <system.webServer>
      <security>
         <requestFiltering>
            <denyUrlSequences>
               <add sequence=".." />
               [...]
Run Code Online (Sandbox Code Playgroud)

……但这不起作用;在拒绝规则运行之前example.com/page/../other-page就已经变成了。您可以通过为和 访问example.com/other-page设置拒绝规则来证明这一点。规范化路径被规则阻止,但在原始状态下不会匹配。page/subexample.com/page/./sub-page

我已经在 IIS v7.5 和 v10 上对此进行了测试,我想它也存在于每个中间版本中。

  1. 正在做什么标准化?(大概是这个图书馆?)
  2. 它在请求生命周期中什么时候发生?
  3. 如何在不造成安全漏洞的情况下成功阻止以下序列?.../, 和//

互联网搜索只想告诉我有关旧版本 IIS 中大约 2000 年的漏洞,或者如何启用带点的 MVC 路由。

调试注意:如果您用来curl测试此行为,请确保添加该--path-as-is选项,这样它就不会在客户端中进行标准化。一些浏览器似乎也在进行客户端标准化。
使用说明:我名义上试图关闭,example.com/clubs-baby-seals/../about-us以免有人将链接的成功加载视为对海豹虐待的认可。

iis directory-traversal iis-10

5
推荐指数
1
解决办法
2461
查看次数

为什么我不能删除Perl中的这个空目录?

我正在从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)

perl directory-traversal find

4
推荐指数
2
解决办法
2246
查看次数

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

我处于这样一种情况,我需要允许用户下载从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?

php directory directory-traversal

4
推荐指数
1
解决办法
4244
查看次数

由于遍历的目录不可执行,获取权限被拒绝的原因

我有/a/b一个用户可读的文件A。但/a不提供由 的可执行权限A,因此路径/a/b无法遍历/a。对于任意长的路径,由于用户无法访问中间路径,我将如何确定无法访问给定路径的原因?

linux permissions file-permissions directory-traversal

4
推荐指数
1
解决办法
1191
查看次数

在网站上获取*.aspx的代码

有没有办法在我的网站上获取所有.aspx文件?也许迭代网站的文件结构并添加到数组?

asp.net directory-traversal

3
推荐指数
1
解决办法
245
查看次数

如何在Android中递归扫描目录

如何递归扫描Android中的目录并显示文件名?我正在尝试扫描,但它很慢(强制关闭或等待).我正在使用在这个问题FileWalker的单独答案中给出的课程.

java file-io android directory-traversal android-anr-dialog

3
推荐指数
1
解决办法
8734
查看次数