使用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