其他分享
首页 > 其他分享> > 使用array_slice删除scandir点和点点条目是否安全?

使用array_slice删除scandir点和点点条目是否安全?

作者:互联网

我想在我的PHP脚本中使用带有scandir的array_slice.

正常用法:

<?php

$files = scandir('/path/to/files');

foreach($files as $file) {
    if($file != '.' && $file != '..') {
        // Do something here...
    }
}

我的例子:

<?php

$files = array_slice(scandir('/path/to/files'), 2);

foreach($files as $file) {
    // Do something here...
}

我的疑问是,使用这种类型的逻辑是否安全?

解决方法:

绝对不安全.下面的示例创建一个目录,其中包含名为!的文件.当scandir对结果进行排序时,!出现在之前.和..:

mkdir('test');
touch('test/!');
print_r(scandir('test'));
unlink('test/!');
rmdir('test');

输出:

Array
(
    [0] => !
    [1] => .
    [2] => ..
)

通常,对于所有以.之前的字符开头的文件名,这都是一个问题.其中包括一些不可打印的字符,这些字符在现实世界的数据中可能不存在,但它也适用于常见的标点符号,包括! #$%& ()-.

即使它起作用了,我也不推荐这样做,因为使用array_slice会使代码的意图变得不清楚.

标签:scandir,php
来源: https://codeday.me/bug/20191029/1958458.html