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

标签 security policy

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

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

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

最佳答案

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

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

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

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

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

还要确保 Content-Disposition 设置为 attachment :

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

这可以防止通过上传包含脚本标签的 HTML 或其他同源策略来实现 XSS bypasses using Flash or PDF files .这里的场景是一个时事通讯编辑损害了另一名时事通讯编辑的 session 。也值得设置X-Content-Options: nosniff ,这也可以防止这种情况。 xap文件 (Silverlight) 也可以绕过同源策略,因此请检查文件名不能以 .xap 结尾。请求您的文件

例如www.example.com/FileLink.ashx/x.xap?FileName=Word.docx
您可以将 Silverlight 的内容类型设置列入黑名单,作为对这种特殊情况的额外保护。 Source here :

Note: .XAP files can be renamed to any other extension but they cannot be load cross-domain anymore. It seems Silverlight finds the file extension based on the provided URL and ignores it if it is not .XAP. This can still be exploited if a website allows users to use ";" or "/" after the actual file name to add a ".XAP" extension.

Note: When Silverlight requests a .XAP file cross-domain, the content type must be: application/x-silverlight-app.



我自己也验证了这些场景,并且它们是当前有效的攻击媒介。

关于security - 上传的白名单或黑名单文件扩展名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9360770/

相关文章:

php - 从用户输入中获取字母数字字符串的安全方法? (没有 preg_replace)

security - 上下文切换到安全模式的成本是多少(arm trustzone)

amazon-web-services - 如何通过其规则修复 checkov 失败的项目?

linux - 英特尔 CPU 缓存策略

python - 存储元素的 Pyramid 授权

web-services - 防止 RESTful JSON Web 服务上的垃圾邮件

c# - ASP.NET MVC : validation domain password

java - 在 Java 中设置 SSL 验证的正确方法

ios - Amazon SQS/SNS 策略错误

java - AntiSamy 是否允许通过编码的脚本警报?如何阻止?