对于用户提供的文件名,正则表达式是安全的 - PHP

时间:2013-10-08 18:38:27

标签: php regex file security

我知道黄金法则,绝不相信用户提供的文件名。我想打破这个规则。以下方案有什么不安全的地方吗?

   $name = $_POST['name'];
   $id = intval($_GET['id']);

   $sanitized_name = preg_replace('/[^0-9a-zA-Z]/','',$name);

   $fp = fopen("/path/to/".$id."/".$sanitized_name.".jpg",'w');

如果我用''替换非0-9或a-z或A-Z的所有内容,那么绝对有0%的变化,任何人都可以注入'。'创建自己的扩展(使用NULL字节的组合)或遍历目录。这似乎很安全。我只是想通过SO来运行它。

此外,由于ID被强制为int,所以任何时髦的东西都会变成0。

1 个答案:

答案 0 :(得分:0)

如果安全,则表示用户无法强制上传到其他文件夹或其他扩展程序,是的,这很好。

Addtionnaly,为了使文件名“更独特”,您可以在文件名中添加时间戳time()和/或随机数rand(0, MAX)