我正在制作一个小型文件共享网站,用户可以在其中上传内容。最近有人上传了一个PHP脚本,可能是为了损害网站。它让我思考:我应该阻止用户上传哪些文件类型?我已经阻止了.exe
个文件。哪些其他文件类型可能对我的网站或其用户造成伤害?
答案 0 :(得分:9)
不要将文件存储在可直接访问的位置 - 仅通过您控制的脚本提供访问权限。不要使用用户提供的文件存储文件 - 使用您生成的文件名(最佳选择是将文件详细信息存储在数据库中,包括原始文件名,并使用该数据库记录的主键字段存储实际文件。
有了这两个,人们就可以上传他们想要的antyhing,并且在你的服务器上执行/解释文件的可能性是零,因为它永远不会被执行/解释。
答案 1 :(得分:5)
看起来脚本在它仍在定义函数时被截断了,所以我无法弄清楚它正在做什么。
但是,如果你正确地做了事,你的“上传文件”目录中应该有一个.htaccess
文件:
Header set Content-Disposition "attachment"
这将确保访问该目录中的任何文件将导致下载,并且该脚本将不会运行。
(实际上更好的是将文件放在webroot之外,并有一个“下载程序”php脚本echo
文件内容)
答案 2 :(得分:1)
该脚本可以委婉地描述为远程管理脚本。
您应始终使用白名单,而不是黑名单。而不是“枚举不良”,列出允许的文件类型并拒绝其他所有内容。
此外,所有上传的文件都应该放在一个不运行PHP处理程序的目录中,或者根本放在任何其他脚本处理程序中(例如,检查用PHP编写的其他内容管理系统在.htaccess
中执行的操作他们的上传目录。)
将上传的文件放在一个单独的子域中也是一个好主意,该子域无法访问主域的cookie,以避免尝试在与主站点相同的源上运行JavaScript代码的攻击(内容类型的白名单是不够的,因为已知一些浏览器猜测内容类型并将非HTML文件视为HTML)。