从安全角度来看,在允许用户上传文件时应该怎么做?

时间:2012-01-04 14:43:17

标签: asp.net xml security validation file-upload

我允许用户上传xml文件。从安全角度来看,我该怎么办?我想阻止用户每天上传三次以上。我正在寻找有关安全问题的任何建议。

4 个答案:

答案 0 :(得分:2)

基本步骤:

  1. 要求用户拥有帐户并在允许用户上传任何文件之前登录
  2. 计算每天上传的文件数
  3. 如果已达到限制,请不要让他们上传其他文件。
  4. 除此之外,关于上传文件的安全性还有很多事情需要考虑,但是没有任何安全事项与仅上传一定数量的文件有关。

答案 1 :(得分:2)

  1. 文件大小的基本健全性检查
  2. 避免使用DTD或XSD进行验证。如果必须,请务必阅读"XML bombs"。此外,可以从互联网下载XSD。攻击者可能会输入一个永久加载的XSD URL,从而导致DOS
  3. 根据您的业务规则验证XML,如果没有通过验证,请从硬盘中删除它。
  4. 如果您将文件保存在服务器上,请确保该目录没有执行权限
  5. 最好将文件重命名为随机名称,因此即使文件为“abc.xml”,它也会在硬盘上保存为abc-433fdsadf3234234.xml。
  6. 不允许用户通过匿名网址下载他上传的文件。如果可以,请阻止上传文件的下载。如果您不能,请使用丢弃域或使用IP地址提供文件。这是为了防止内容嗅探错误。即使您设置了内容类型,某些浏览器也可能会误以为该文档是HTML。然后,这允许攻击者插入可由浏览器执行的javascript代码。
  7. 编辑: 有关内容类型嗅探的更多信息

    让我们说攻击者在前几行上传一个包含HTML的XML文件。当用户下载此XML时,可能会欺骗浏览器认为此XML是HTML。

    一旦您欺骗了浏览器,攻击者就可以在用户浏览器上执行javascript。一个简单的例子就是窃取会话cookie。

    把它放在一起,这就是攻击的工作方式 - 1.攻击者上传包含javascript代码的XML 2.攻击者将下载链接发送给另一个受害者 3.攻击者现在可以在受害者浏览器上执行javascript并窃取他的cookie

    为防止这种情况 - a)根据您的架构验证XML,b)不允许用户下载上传的文件,c)从IP地址或与您的常规域不同的域提供文件 - 所以饼干不能被盗。您可以在此处阅读类似的信息 - https://security.stackexchange.com/questions/8587/how-can-i-be-protected-from-pictures-vulnerabilities

答案 2 :(得分:1)

您需要以某种方式识别您的用户,通常有两种方式:

  • 使用会话标识符(默认情况下存储在cookie中)。如果用户删除了他的cookie,可以很容易地绕过这个
  • 通过验证您的用户。

识别用户后,您可以按业务逻辑扩展控制器操作方法,以检查用户上载文件的次数。其余的可以与以下article how to upload files in asp.net mvc相同。

答案 3 :(得分:1)

  1. 限制他们可以上传的文件的大小(降低服务上DDOS的风险)
  2. 在使用它之前运行验证例程(降低消耗无效文件时DDOS的风险)
  3. 要求对上传处理程序进行身份验证(降低不受欢迎文件的风险)
  4. 设置上传可以花费的时间限制(这可以降低服务上DDOS的风险)
  5. 理想情况下,如果您期望某个特定架构的xml文件,那么请查看所提供的文件是否针对该架构进行验证,而不是仅作为xml验证,如果不是,则拒绝它。

    只是为了让你开始。