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

2024-05-09

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

该站点的设置使得只有 .do URI 实际由 servlet 执行/处理,因此不会有太大的安全风险,但有人告诉我将 .jsp、.php、.asp、.aspx、.exe 列入黑名单。 .com 和 .bat。我觉得这并不是一个全面的黑名单,而且我的印象是黑名单不是一个好政策。

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


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

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

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

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

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

还要确保Content-Disposition https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition被设定为attachment:

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

这可以防止通过上传包含脚本标签的 HTML 或其他同源策略来实现 XSS使用 Flash 或 PDF 文件绕过 https://soroush.secproject.com/blog/2014/05/even-uploading-a-jpg-file-can-lead-to-cross-domain-data-hijacking-client-side-attack/。这里的场景是一名新闻通讯编辑危及另一名新闻通讯编辑的会话。还值得设置X-Content-Options: nosniff,这也可以防止这种情况。xap文件 (Silverlight) 也可能绕过同源策略,因此请检查文件名不能以.xap索取您的文件

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

您可以将 Silverlight 的内容类型设置列入黑名单,作为这种特殊情况的额外保护。来源在这里 https://github.com/nccgroup/CrossSiteContentHijacking/blob/master/README.md:

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

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 使用 C# 作为我的 DSL——这可能吗?如果可以,如何实现?

    是否可以使用 C 作为 DSL其中 C 源代码由最终用户在 TextBox 中编辑 在应用程序运行时编译 然后由已运行的应用程序调用 我问这个问题是因为在接下来的几个月里 我将需要实现一个简单的数学运算 DSL 类似于 Rachel Lim
  • 使用openssl从服务器获取证书

    我正在尝试获取远程服务器的证书 然后可以将其添加到我的密钥库中并在我的 Java 应用程序中使用 一位高级开发人员 正在度假 告诉我我可以运行这个 openssl s client connect host host 9999 获取转储的原
  • JSON 安全最佳实践?

    在研究这个问题的同时JSON 与 XML http www subbu org blog 2006 08 json vs xml 我碰到这个问题 https stackoverflow com questions 325085 when t
  • 使用链接进行电子邮件验证是一个坏主意

    在我的注册过程中 用户注册后 他们会收到通过电子邮件发送的验证链接 如果他们单击该链接 那么他们的帐户才会得到验证 但这种验证方法对于机器人来说是不是太容易了 我认为电子邮件可以由机器人创建 但可以肯定的是 如果验证只是单击链接 那么它也可
  • 加密成本高,解密成本低

    我希望该用户 攻击者加密数据并发送给服务器 现在我想要一种与标准算法完全相反的算法 使用快 难以解密 即很难使用服务器发送的密钥来加密密码等数据 以防止随机攻击 但很容易解密这样服务器在验证用户时消耗的时间非常少 但是对于攻击者来说 每次使
  • openssl_crypt 中初始化向量的使用

    我看了一下this https stackoverflow com questions 1391132 two way encryption in php问题 并想为自己做 当我运行这段代码时 直接取自这个答案 https stackove
  • 用户如何登录定义了读者角色的 couchapp?

    我通过 Couchapp 部署了我的应用程序 这意味着整个应用程序是从数据库中提供服务的 我不希望 Couchdb 数据库中的数据公开可用 因此我指定了用户在向他提供数据之前必须具有的读者角色 然而 当我去申请时 我所能得到的是 error
  • 如何检测CSRF漏洞[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定一个网站 如何检测潜在的 CSRF 漏洞 提前致谢 这是一个CSRF https www owasp org index php
  • 安全转义表名/列名

    我在 php 中使用 PDO 因此无法使用准备好的语句转义表名或列名 以下是我自己实现它的万无一失的方法 tn str replace REQUEST tn column str replace REQUEST column sql SEL
  • 警告:您的 git 版本是 1.9.3。存在严重的安全漏洞

    我在部署到 Heroku 期间收到有关 git 1 9 3 严重安全漏洞的警告 我尝试通过 homebrew 更新 git 但发现 git 最初并不是通过 homebrew 安装的 然后我通过自制程序安装了它 brew update bre
  • 如何在 Web 应用程序中使用 Javascript 安全地访问 Windows Azure 移动服务?

    我需要一本 web javascript 安全入门书 根据如何使用 Windows Azure 移动服务的 HTML JavaScript 客户端 http www windowsazure com en us develop mobile
  • 为什么将 MySQL 凭据放在 www 目录之外? [复制]

    这个问题在这里已经有答案了 可能的重复 将核心类放在 Web 根目录之上 好还是坏主意 https stackoverflow com questions 3648739 putting core classes above the web
  • 客户端登录 - 如何在客户端安全地存储凭据?

    许多 API 都提供通过用户 密码组合远程访问其数据的功能 我想知道存储这些值的最佳方式是什么 高度安全的方式 即使 100 是不可能的 以便直接连接它们而无需每次都询问这些值 我推荐以下三种方法之一 使用身份验证令牌完全避免存储密码 在此
  • 什么是 API 密钥? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如今 我几乎在每个跨服务应用程序中都看到这个词 API 密钥到底是什么以及它的用途是什么 另外 公共 API 密钥和私有 API 密钥
  • 使用 Javascript eval() 100% 安全吗?

    我正在编写一个生成 Javascript 代码的 PHP 库 Javascript 代码有许多名为component001 component002 etc 页面通过 AJAX 动态加载 我需要通过 URL 变量传递组件的名称 然后由脚本进
  • 如何在 iOS 上固定证书的公钥

    在提高我们正在开发的 iOS 应用程序的安全性时 我们发现需要对服务器的 SSL 证书 全部或部分 进行 PIN 操作以防止中间人攻击 尽管有多种方法可以做到这一点 但当您搜索此内容时 我只找到了固定整个证书的示例 这种做法会带来一个问题
  • 访问被拒绝(“java.io.FilePermission”“执行”)

    我是初学者 这是我写的第一个小程序 我想用小程序运行 exe 应用程序 java代码 package appletexample import java io import java awt import java applet Apple
  • 这个巨大的正则表达式是如何工作的?

    我最近在我的一个目录中的一个名为的文件中找到了下面的代码doc php 文件功能或链接到文件管理器 做得非常好 基本上 它列出了当前目录中的所有文件 并且允许您更改目录 它可以访问我的所有文件 添加 重命名 信息 删除 我不记得安装过它 我
  • 使用XACML来表达策略,它是一个逻辑表达式

    我对 XACML 很陌生 我正在使用 XACML 来表达策略 但除了以下几个例子之外 我找不到任何好的例子OASIS XACML技术委员会 http docs oasis open org xacml 3 0 xacml 3 0 core
  • 如何使用 .NET 以编程方式沙箱进程

    我计划设计一个系统 本质上允许用户在我的机器上运行 PHP Ruby 等脚本代码 我想将它们放入沙箱中 以防止它们访问机器的关键方面 哪些 NET API 可用于此目的 我计划从主流程创建一个子流程 并希望以编程方式从主流程中沙箱该子流程

随机推荐

  • 可以混合使用 JVM 语言吗?即:Groovy 和 Clojure

    我知道你可以轻松地混合groovy java clojure java 无论什么JvmLang java 这是否也意味着我也可以让 clojure 和 groovy 代码进行交互 如果我使用 Grails 或 jRoR 我也可以在该环境中使
  • 如何在网格视图的单元格中插入换行符?

    我想知道如何在网格视图的单元格中添加换行符 现在 我把 1 1 1 然而 这呈现为 1 1 1 如何修复换行符 以便每个数字显示在自己的行上 Add HtmlEncode False to asp BoundField并且在正文中 应该有
  • 使用sklearn进行多标签特征选择

    我希望使用 sklearn 对多标签数据集执行特征选择 我想要获得最终的功能集across标签 然后我将在另一个机器学习包中使用它 我打算使用我看到的方法here https stackoverflow com questions 1640
  • 属性错误:类型对象“图像”没有属性“打开”

    Exception in Tkinter callback Traceback most recent call last File C Python34 lib tkinter init py line 1482 in call retu
  • Ninject 绑定所有实现相同接口的类

    我有一个接口类 public interface IStartUpTask bool IsEnabled get void Configure 我有多个类实现相同的接口 其中一个类如下所示 public class Log4NetStart
  • log4net 控制台应用程序未登录发布

    我有一个使用 log4net 的控制台应用程序 通过温莎城堡 当我调试时 一切都很好地记录到控制台 但是当我发布并运行应用程序时 没有记录任何内容 我的 log4net 配置位于单独的文件 log4net config 中 我认为它没有找到
  • SDK 管理器中缺少 Google Play 服务

    我想在我的应用程序中使用 Google 地图 我想在 SDK 管理器中安装 Google Play 服务 但是当我转到 SDK 管理器时 我没有看到 Google Play 服务 为什么 我该如何安装这个 我可以独立于 SDK Manage
  • 如何清除整个终端(PowerShell)

    我有一个问题 在powershell中使用clear或cls命令仅清除终端的可见部分 我想知道如何清除整个终端 顺便说一句 我使用 VSCode tl dr 问题是关于清零的both屏幕和回滚缓冲区 in the 综合终端 of 视觉工作室
  • /proc/PID 文件格式

    我想从中检索一些流程信息 proc目录 我的问题如下 中的文件是否有标准格式 proc PID 例如 有这个proc PID status文件与Name t ProcName在第一行 我可以在其他地方用空格代替这个文件吗 t或者类似的东西
  • 找到的程序集的清单定义与程序集引用不匹配

    我试图在 C Windows 窗体应用程序 Visual Studio 2005 中运行一些单元测试 但出现以下错误 System IO FileLoadException 无法加载文件或程序集 实用程序 版本 1 2 0 200 文化 中
  • 从 org.w3c.dom.Node 获取 Xpath

    我可以从 org w3c dom Node 获取完整的 xpath 吗 假设当前节点指向 xml 文档中间的某个位置 我想提取该元素的 xpath 我正在寻找的输出 xpath 是 parent child1 chiild2 child3
  • 在 Android 5 上支持 BLE 外设角色的芯片组 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 Android 5 0 Lollipop 引入的新 BLE 外设模式将不会在 Nexus 4 5 或 7 上启用 https code
  • 调用 Perl 子程序时使用 & 符号和括号

    usr bin perl sub t print in t n print n s sub s print in s n print n t 1 2 print out n print n Output in t 1 2 in s 1 2
  • Atom“自动完成”不起作用

    因此 当您安装 Atom 时 autocomplete 会随其一起提供 并且默认情况下处于启用状态 当我编写代码时 什么也没有显示 为什么 是否需要配置任何文件才能正常工作 In autocomplete plus settings pag
  • org.hibernate.MappingException:没有 JDBC 类型的方言映射:1111

    我使用的是 postgres v8 3 它的列类型为 XML DDL 看起来像这样 CREATE TABLE contact ID INTEGER NOT NULL NAME VARCHAR NOT NULL Details XML 在映射
  • 计算属性应该在模型或控制器中声明吗?

    具有以下用户模型 Sks User DS Model extend firstName DS attr string lastName DS attr string fullName 计算属性应该在哪里声明 fullName Ember c
  • 如何从对应的数组值中获取数组键?

    您可以轻松地通过其键获取数组值 如下所示 value array key 但如果我有该值并且想要它的密钥怎么办 获得它的最佳方式是什么 你可以使用array search https www php net manual en functi
  • 如何理顺 Laravel Blade @extends 的执行顺序?

    In 我尝试找到一种通过引用刀片 include来传递变量的方法 https stackoverflow com questions 25437939 how to pass variables by reference to includ
  • 从 Wikipedia XML 转储获取静态 HTML 文件

    我希望能够从巨大的 即使是压缩的 英语维基百科 XML 转储文件中获取相对最新的静态 HTML 文件enwiki 最新 pages articles xml bz2 http download wikimedia org enwiki la
  • 上传的白名单或黑名单文件扩展名?

    我正在制作一个新闻通讯编辑器 它将允许文件上传 新闻通讯的发件人可以将文件上传到将在电子邮件中链接到的服务器 该站点的设置使得只有 do URI 实际由 servlet 执行 处理 因此不会有太大的安全风险 但有人告诉我将 jsp php