2012-02-20 179 views
3

我正在制作一个新闻通讯编辑器,允许上传文件(通讯的发送者可以上传文件到服务器,这个文件将被链接到电子邮件中)。上传的白名单或黑名单文件扩展名?

该网站已设置为只有.do URIs实际上由servlet执行/处理,因此它没有太大的安全风险,但我被告知黑名单.jsp,.php,.asp,.aspx ,.exe,.com和.bat。这并不是一个全面的黑名单,我认为黑名单不是一个好策略。

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

回答

3

还是更适合只允许任何内容并通过病毒扫描程序运行它。

是的。

这两个黑名单和白名单都是平凡的规避,并导致行政管理的痛苦,并提供任何安全。

0

在我看来,尽管白名单可能有点难以维护,但它比使用黑名单更安全。

忘记向白名单添加内容并返回并更改内容要比忘记将新文件扩展名添加到黑名单并遭到黑客入侵要好得多。

除白名单,我还是病毒扫描上传的文件,因为即使是看似无害的文件(如.PDF或.doc)可以有恶意代码(.PDF的支持JavaScript,和.doc宏)

1

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

例如www.example.com/FileLink.ashx?FileName=Word.docx

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

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

1

我会建议你:

  • 使用白名单的方式(通过上述的原因,这是相当 更安全)
  • 检查文件类型(旁路但仍多一个指标)
  • 商店上传文件在未公开的内部文件夹中(使用非枚举ID)
  • 设置文件夹中包含上传文件的低级权限
  • 为上传的文件设置尽可能少的权限
  • 确保没有安全的库来上载已可用的文件。

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