限制数据库文本字段以防止伤害的最佳实践

Best practice to limit DB text field just to prevent harm

我工作的项目中有一些博客文章,并且, 我想,它的 text 字段应该以某种方式受到限制 (可能有一天它会是一个 JSON 字段)

没有领域感的限制- 用户想写多少就写多少,但是, 只是为了防止 DB 受到异常大量文本的黑客攻击,猜测,需要一些限制。

如此 Q/A 说:

  1. PostgreSQL 限制文本字段 1GB
  2. http POST 限制取决于浏览器 (2GB - 4GB) https://serverfault.com/questions/151090/
  3. 据传言,Nginx 的默认 client_max_body_size1MB

那么,如何处理这一切?

大概有这样的做法: “只需在 app-lvl 中将其限制为百万个字符,不用担心”?

这是一个有趣的问题。如果我理解正确,您正在开发一个应用程序,其中数据库条目本质上是一个博客 post(基于我阅读的大多数博客,通常为 500-1000 字)。

您正在将博客 post 作为文本字段存储在数据库中。您非常担心大数据块会发生什么。

我完全赞成您对用户可以输入的数据量进行限制。如果不完全了解您的系统架构,就不可能根据所使用的技术说出理论上的最大大小。

不过,最好从用户的角度来看这个。您必须存储的最大合理文本量是多少,然后让我们多加一点,比如 10%,因为让我们面对现实吧,用户会做出意想不到的事情。然后,您可以在有人尝试输入更多数据时添加错误条件。

我提出这种方法的原因很简单,一旦您定义了最大 post 大小,您就可以使用边界值分析(仅测试限制的任一侧)来证明您的产品行为正确刚好低于和处于极限。这样您就可以了解并可以向用户等解释产品行为

如果您选择让体系结构定义限制,那么您将有未定义的行为。您将需要依次分析每个组件,以计算出它们可以接受的最大尺寸以及超过该尺寸时它们表现出的行为。

通常(根据我的经验)开发人员不会投入这些精力并让用户为他们进行测试。这当然通常更糟,因为用户报告了一个奇怪的错误消息,然后调试最终是耗时且昂贵的。