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

Security 上载的白名单或黑名单文件扩展名?,security,Security,我正在制作一个时事通讯编辑器,允许上传文件(时事通讯的发送者可以将文件上传到服务器,该服务器将在电子邮件中链接到) 该站点的设置使得servlet实际上只执行/处理.douri,因此没有太大的安全风险,但我被告知要将.jsp、.php、.asp、.aspx、.exe、.com和.bat列入黑名单。我并不认为这是一个全面的黑名单,我的印象是黑名单不是一个好的政策 另一方面,一个白名单可能有几十条。识别允许/不允许扩展的正确方法是什么?还是只允许任何东西并通过病毒扫描程序运行它更合适?或者是这些的组

我正在制作一个时事通讯编辑器,允许上传文件(时事通讯的发送者可以将文件上传到服务器,该服务器将在电子邮件中链接到)

该站点的设置使得servlet实际上只执行/处理.douri,因此没有太大的安全风险,但我被告知要将.jsp、.php、.asp、.aspx、.exe、.com和.bat列入黑名单。我并不认为这是一个全面的黑名单,我的印象是黑名单不是一个好的政策


另一方面,一个白名单可能有几十条。识别允许/不允许扩展的正确方法是什么?还是只允许任何东西并通过病毒扫描程序运行它更合适?或者是这些的组合?

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

与其忘记在黑名单中添加新的文件扩展名而遭到黑客攻击,不如忘记在白名单中添加某些内容,并必须返回并更改它

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

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


黑名单和白名单都是微不足道的规避,只会造成管理上的麻烦,而且不提供任何安全性。

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

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

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

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

同样值得对每个文件进行病毒扫描,以防时事通讯作者上传(恶意或意外)一个文件,攻击订阅者的计算机而不是服务器

还要确保将设置为附件:

Content-Disposition: attachment; filename="filename.html"
这可以防止XSS通过上载包含脚本标记的HTML或其他同源策略来实现。这里的场景是一个时事通讯编辑在另一个时事通讯编辑的会话中妥协。还值得设置
X-Content-Options:nosniff
,这也可以防止出现这种情况
xap
文件(Silverlight)也可以绕过同源策略,因此请检查文件名不能以
.xap
结尾以请求文件

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

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

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

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

我还亲自验证了这些场景,它们是当前有效的攻击向量。

我建议您:

  • 使用白名单方法(基于上述原因,这是公平的 (更安全)
  • 检查文件类型(可绕过,但仍有一个度量值)
  • 将上载的文件存储在不向公众公开的内部文件夹中(使用非枚举ID)
  • 对将包含上载文件的文件夹设置低级权限
  • 对上载的文件设置尽可能少的权限
  • 确保没有可用于上载文件的安全库

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

病毒扫描程序和黑/白列表解决了两个不同的问题。病毒扫描程序用于确保客户端可以安全下载上传的文件。黑/白列表有助于减少潜在的远程代码执行漏洞。我相信白名单是最好的方法。您还可以将文件名存储在数据库中,并使用数据库记录ID作为服务器端的文件名。