文件上传安全注意事项

1、文件权限

上传的文件应该是只读(read-only)或读写(read-write)的,永远不应该可执行(executable)。

2、文件存储目录

如果你的网站根目录是/var/www/example.com,请不要保存上传文件在/var/www/example.com/uploaded_files

而应该保存到一个不能直接访问的目录(例如:/var/www/example.com-uploaded/),以免意外地将其作为服务器端脚本执行,并获得执行远程代码的后门,最好上传到第三方存储介质。

一个更加简洁的方法是将网站根目录(统一入口文件)往下移动一个层级(即:/var/www/example.com/public)。

3、文件类型限制

强制后缀名,判断后缀名与上传的mine-type是否一致(不一致就可判断是伪装的),如果是图片格式,检测文件头。上传后强制重命名.

上传的文件不要保存为原名,要保存为对方猜不到的文件名(如文件加盐hash或随机字符串+文件hash,不带扩展名),和原名一起保存在数据库里。

4、文件大小限制

如PHP 通过php.ini控制