代码之家  ›  专栏  ›  技术社区  ›  Geo

如果我们发布一个表单,允许您将任何类型的文件上载到我们的数据库中,我们会遇到哪些安全问题?

  •  1
  • Geo  · 技术社区  · 15 年前

    如果我们允许在我们的公共网站上有一个表单,允许用户上传任何类型的文件并将其存储在数据库中,我将尝试评估我们的安全风险。

    我担心以下问题:

    • 机器人上传信息
    • 数据库规模的巨大增长
    • 该表格是一份简历上传,因此HR人员将以jpeg、doc或pdf格式下载这些文件,但实际上会感染病毒。
    3 回复  |  直到 15 年前
        1
  •  0
  •   Rasik Jain    15 年前

    您可以对文件上载控件进行多次检查。

    1)检查 文件扩展名 (.wmv,.exe,.doc)。这可以通过 正则表达式 表达式。

    2)实际检查 文件头 或定义类型(例如:gif、word、image等,XLS)。有时文件扩展名不够。

    3)限制 文件大小 . (EX:20MB)

    4)绝不接受用户提供的文件名。 总是将文件重命名为某个guid 根据您的规格。这样黑客就无法预测存储在服务器上的文件的实际名称。

    5)存储所有文件 Web外虚拟目录 . 最好存储在单独的文件服务器中。

    6)同时执行 验证码 用于文件上传。

        2
  •  1
  •   Brinley Ang    15 年前
    1. 你可以用Captchas处理机器人
    2. 为每次上载设置合理的文件大小限制
        3
  •  0
  •   Ramon Poca rjmoggach    15 年前

    一般来说,如果您真的打算允许上载任何类型的文件,我建议:

    • 使用mime magic数字进行的最小类型检查,即文件的扩展名与给定文件的扩展名相对应(尽管如果不限制可以上载的文件的类型,这并不能解决很多问题)。
    • 更好的是,在上传后让防病毒软件(例如免费ClamAV)检查文件。

    在存储方面,我总是喜欢使用文件系统来实现它的创建:存储文件。我不建议在数据库中存储文件(支持关系数据库)。您可以将文件的元数据存储在数据库中,并在文件系统中存储指向该文件的指针。 为文件生成唯一的ID,您可以使用两级目录结构来存储数据:例如:id=123456=>/path/to/store/12/34/123456.data

    也就是说,这取决于你想要存储什么以及你想要如何管理它。为文档存储库、图像库或简单的“共享目录”提供服务是不一样的。