zl程序教程

您现在的位置是:首页 >  其他

当前栏目

文件上传漏洞的修复

2023-09-14 09:14:27 时间

在上一篇的文件上传漏洞的文章中,我们提到过"文件上传"的功能本身是没有问题的,知识在一些特定的条件下会被网络攻击者利用,从而才会成为漏洞。那么"文件上传"的功能要如何设计才能变得更安全一些呢?

文件上传目录设置为不可执行权限

根据攻击手段来看,只要WEB容器无法解析该目录下的文件,即便网络攻击者上传了脚本文件,服务器本身受到任何影响。在实际的网络应用当中,尤其是一些大型的网络应用的上传功能,在文件上传后会放到一个独立的存储区域上(如站库分离),做静态文件处理,一方面呢是为了方便使用缓存加速,降低服务器的性能损耗;另一方面也杜绝了脚本执行的可能。

如果说上传的文件没有放到一个独立的存储区域,但是也做了上传目录不可执行的权限,也是可以通过一些绕过手段从而getshell的,具体绕过方法参见上一篇文章的"上传文件目录权限绕过"。

还有一种情况就是对于大型网络应用的一些边边角角的小应用,如果存在上传文件功能,仍需要多加关注。

判断文件类型(白名单)

在上一篇文章中我们对如何绕黑名单和白名单做了一些绕过利用的说明。其中黑名单的方式已经无数次被证实了其不可靠性。这里强烈推荐白名单的方式。

在判断文件类型时,可以结合MIME Type、后缀检查、文件内容检查等方式。此外,对于图片马的处理,可以使用压缩函数或者risize函数,在处理图片的同时破坏掉图片中可能包含的HTML代码。

使用随机数、时间戳改写文件名和文件路径

脚本文件上传后,如果要执行代码,就必须要能够访问到这个文件。

在某些特定的环境下,用户能上传,但不能访问。如果网络应用使用随机数改写了文件名和路径,将会增大网络攻击者的攻击成本。

于此同时,像 shell.php.rar.aaa 类似的脚本文件,或者是 crossdomain.xml 这种文件,豆浆因为文件名被改写,造成攻击者无法顺利的实施攻击。

单独设置文件服务器域名

由于浏览器的同源策略的关系,一系列的基于客户端的攻击手段将失效,比如上传 crossdomain.xml 、上传包含JavaScript的XSS利用等问题将得到有效的解决。但能否如此设置,还是要根据实际的业务实现场景来决定。

文件上传的问题,虽说简单,但是实现一个安全的上传功能,还是非常不易的。如果还要考虑到病毒、木马、色情图片、视屏、反动政治文件、涉恐涉暴等等与具体业务结合的相关问题,就需要做更多更具有针对性的工作了。

只有不断的去发现问题、结合实际业务的需求去解决问题,才能够设计出符合应用的最安全、最合理的上传文件功能。

小结

文件上传往往与代码执行严密的联系在一起,因此对于网络应用中所有场景业务中要用到的上传功能,都应该由安全工程师、渗透测试工程师进行严格的检查。同时文件上传又可能存在诸如钓鱼、木马、病毒等危害到产品用户的业务风险问题,所以说在文件上传功能上需要考虑到的问题将会越来越多。