上传的白名单或黑名单文件扩展名?

时间:2012-02-20 12:00:07

标签: security policy

我正在制作一个允许文件上传的新闻稿编辑器(新闻稿的发件人可以将文件上传到将在电子邮件中链接的服务器)。

该站点设置为只有.do URI实际上由servlet执行/处理,所以它没有太大的安全风险,但我被告知黑名单.jsp,.php,.asp,.aspx, .exe,.com和.bat。这并不是一个全面的黑名单,我的印象是黑名单不是一个好的政策。

另一方面,白名单会长达数十年。识别允许/不允许的扩展的正确方法是什么?或者只是允许任何东西并通过病毒扫描程序或它们的某些组合来运行它更合适吗?

4 个答案:

答案 0 :(得分:3)

我会允许上传任何文件扩展名,但我会将文件存储在不直接由Web服务器提供的文件夹中。然后,我将创建一个HTTP处理程序,该处理程序将从电子邮件链接到,该电子邮件将流式传输所请求的文件可以通过原始文件名,系统生成的文件名或ID来请求该文件。无论哪种方式,我都会清理参数以防止目录遍历攻击。

e.g。 www.example.com/FileLink.ashx?FileName=Word.docx

这样您就不必担心将来是否希望将其他文件扩展名作为可执行文件类型提供服务,因为任何文件都是直接从文件系统的字节流提供的,并且永远不会通过Web服务器处理程序传递。

您还可以使用处理程序检查当前用户是否具有加载文件的正确权限。

对于每个文件进行病毒扫描也是值得的,以防通讯作者上传(恶意或无意)上传攻击用户计算机而不是服务器的文件。

同时确保Content-Disposition设置为attachment

Content-Disposition: attachment; filename="filename.html"

这可以防止通过上传包含脚本标记的HTML或其他同源策略bypasses using Flash or PDF files来实现XSS。这里的场景是一个新闻通讯编辑,它破坏了另一个时事通讯编辑的会话。值得设置X-Content-Options: nosniff,这也可以防止这种情况。 xap个文件(Silverlight)也可以绕过同源策略,因此请检查.xap中的文件名是否无法结束以请求您的文件

e.g。 www.example.com/FileLink.ashx/x.xap?FileName=Word.docx

您可以将Silverlight的内容类型设置为黑名单,作为此特殊情况的额外保护。 Source here

  

注意:.XAP文件可以重命名为任何其他扩展名,但不能   再加载跨域。似乎Silverlight找到了该文件   扩展基于提供的URL,如果不是.XAP则忽略它。   如果网站允许用户使用“;”,这仍然可以被利用要么   “/”在实际文件名后添加“.XAP”扩展名。

     

注意:当Silverlight请求.XAP文件跨域时,内容   类型必须是:application / x-silverlight-app。

我自己也验证了这些场景,目前是有效的攻击媒介。

答案 1 :(得分:2)

  

或者只是允许任何东西并通过病毒扫描程序运行它更合适。

黑名单和白名单都被轻易地规避,只会造成行政痛苦并且无法提供任何安全保障。

答案 2 :(得分:1)

在我看来,尽管白名单可能需要维护一些苦差事,但它比使用黑名单要安全得多。

忘记向白名单中添加内容,并且必须返回并更改它,而不是忘记将新文件扩展名添加到黑名单并被黑客攻击,这样会好得多。

除白名单外,我仍会对上传的文件进行病毒扫描,因为即使看似无害的文件(例如.pdf或.doc)也可能有恶意代码(.pdf支持javascript和.doc宏) )

答案 3 :(得分:1)

我会建议你:

  • 使用白名单方法(由于上述原因,它是公平的 更安全)
  • 检查文件类型(可绕过,但还有一个措施)
  • 将上传的文件存储在未向公众公开的内部文件夹中(使用非枚举ID)
  • 为包含上传文件的文件夹设置低级别权限
  • 尽可能少设置上传文件的权限
  • 确保没有安全的库来上传已有的文件。

防病毒不值得。大多数Web shell签名都很容易绕过,因为任何“黑客”都可以添加一些随机代码并在Web shell上执行不同类型的编码。当然,它可以保护您免受常见的外壳,如C99,但现在有数以千计的这些工具是公开的,完全无法察觉。关于保护您的用户免受您网站上托管的可执行文件或受感染的PDF的影响,如果有人能够在您的网站上获取shell并启动恶意软件广告系列,则不会使用已经被av签名发现的恶意软件或病毒。