文件上传中的问题

时间:2010-08-16 12:19:29

标签: php

2 个答案:

答案 0 :(得分:0)

根据您存储文件的方式,您可以使用简单的preg_replace()删除所有非字母数字字符,然后您就不必担心了。

$name1 = preg_replace('~[^a-z0-9_-]~i', '', $_FILES['FileName']['name']);

等待我没有犯任何愚蠢的错误。

如果要将名称存储在数据库中,您只需将实际文件名设为md5哈希值,并在表格中引用该信息即可存储。

答案 1 :(得分:0)

引号在许多系统中充当特殊字符 - 您可能想要清理文件名 - 例如将一组字符列入白名单并删除其他字符:

$name1=$_FILES['FileName']['name'];
$up=uniqid() . preg_preplace('/[^a-zA-Z0-9_-]/','',$name1);

作为奖励,这可以为您提供针对无效文件名和目录遍历攻击的弹性(例如,攻击者会给出“../../../../../../../。 ./etc/passwd“作为文件名。)