修改文件扩展名:将文件的扩展名改为允许的类型。例如,将一个PHP文件的扩展名改为.jpg,然后上传到服务器。这种方式简单直接,但容易被服务器端的文件类型检测机制识别出来。
修改HTTP请求头中的Content-Type字段:通过工具(如Burp Suite)截获上传文件的HTTP请求,修改其中的Content-Type字段为允许的MIME类型。例如,将一个PHP文件的Content-Type改为image/png,从而绕过服务器的MIME类型检查。
服务器端防范措施
多维度文件类型检测:服务器端应结合多种策略来检测文件类型,如基于文件扩展名、MIME类型、文件头魔数等。例如,使用finfo_file()
函数来获取文件的实际MIME类型,而不是仅依赖于上传时的Content-Type字段。
限制文件上传目录的执行权限:将上传的文件保存到不可执行的目录中,即使攻击者上传了可执行文件,也无法在服务器上执行。
使用白名单策略:只允许上传特定的文件类型,而不是禁止某些类型。白名单策略更为安全,因为黑名单策略容易被绕过。
文件内容检测:对上传的文件进行内容检测,例如使用Apache Tika等工具来深入解析文件内容,确保文件类型与实际内容一致。