1

这是根据竞争条件移动上传文件的安全方法吗?

do { 
    $file = $path . "/" . uniqid() . '.' . $ext; 
    $fh = @fopen($file, 'x'); 
} while( ! $fh);
move_uploaded_file($src, $file);

UPD除了学习解决问题的其他方法外,我想知道这段代码是否受制于竞争条件。AFAIU、带有“x”模式的 fopen 和 move_uploaded_file 是原子的,因此不可能发生冲突。

最重要的是,关于“uniqid 就足够了”,几个 在对 tempnam 的评论中表示有必要将 fopen 与 'x' 模式一起使用以避免竞争条件。他们是否过于偏执?我认为,如果它不会使代码变得非常复杂,那么拥有更安全的解决方案会更好。

4

1 回答 1

1

PHP 的tempnam函数保证了唯一性。或者您可以使用基于微时间戳的文件名(在 MS-Windows 下不起作用......)。

于 2012-10-22T20:02:23.247 回答