c# - ASP.NET MVC5 文件下载安全最佳实践?

标签 c# asp.net asp.net-mvc security

我们正在构建一个 ASP.NET MVC5 网络应用程序,其中包括服务文件下载。

用户需要使用 ASP.NET 身份框架登录。

文件存储在数据库中(我们正在与遗留应用程序交互)并且每个文件都由标准整数主键标识。

我们计划按如下方式提供文件:

  1. 用户使用其 ID 请求文件,例如。 http://www.example.com/getFile?fileId=5

  2. Controller 然后检查是否允许请求用户访问该文件(使用一些复杂的业务规则),如果成功则将文件流式传输给用户。

我一直在研究最佳实践,但很难找到具体细节,因为我读过的大部分内容都涉及从物理路径读取文件的场景,因此建议混淆请求中的文件名。

我们可以混淆文件的 ID,但如果 Controller 在每次请求时验证用户对文件的访问权限,我认为这样做没有多大意义。

我们的方法是否足够,或者我们应该采用另一种方式,如果可以,请问推荐的方法是什么?

最佳答案

您的方法完全足够了。如果您的 Controller 中的授权规则足以保护文件,那么这应该就是您所需要的。

唯一发生的信息泄漏是在用于请求文件的 URL 中使用了大概是数据库中文件的主键。如果您的应用程序的另一部分容易受到 SQL 注入(inject)攻击并且攻击者利用您的 URL 中的 ID 构建 SQL 注入(inject)攻击以获取具有特定 ID 的文件,则这可能会产生漏洞。然而,这在实践中是否存在风险取决于您的应用程序是否也容易受到 SQL 注入(inject)攻击,并且大多数攻击者可能会以任何方式猜测或暴力破解 ID,因此即使您容易受到攻击,屏蔽这些 ID 也可能没有什么实际好处SQL 注入(inject)攻击 - 在这种情况下更好的关注点是简单地确保您没有受到攻击。

关于c# - ASP.NET MVC5 文件下载安全最佳实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30615422/

相关文章:

C# 列表属性初始化模式

c# - 如何使用代码在 Unity 中切换复选框?

c# - C# 控制台应用程序使用的日志内存

c# - Ajax jquery 传递多个参数 web 服务

.net - 可以将 ASP.NET 编译为机器代码吗?

css - 文本框内的图标 - 几乎像字形图标

c# - 我可以在 Visual Studio 中将 GitHub 添加为调试器源吗?

asp.net - 如何添加到 ASP.NET HttpRequest 客户端可用的密码套件?

javascript - ASP.NET MVC - 如果您不想将 .js 文件存储在/Scripts 中,您会将它们放在哪里?

jquery - MVC4 - JQuery AutoComplete - .autocomplete 不是函数