对所有内容进行后端(数据库端)验证是否切实可行?

Ruc*_*han 12 sql database

使用后端验证我的意思是,在触发器,检查,程序(插入,更新,删除)等过程 中,它们现在是多么实用或必要,现在大多数这些验证都是在前端严格处理的.有多少后端验证对程序有用?是否应该从后端验证中删除小事?

例如:让我们说人们有年龄障碍输入数据.这可以使用触发器或年龄列中的检查在后端完成.它可以/也可以在前端完成.因此,在前端严格验证年龄时,是否有必要进行后端验证?

Nie*_*jes 27

这是一个概念性问题.一般而言,现代程序分为3层:

  1. 介绍
  2. 商业逻辑
  3. 数据库

通常,第1层可以选择验证现代应用程序中的所有输入,为用户提供有关可能问题的快速反馈(例如,JS弹出窗口说"这不是有效的电子邮件地址").

第2层始终必须进行完全验证.它是后端的网关,它可以检查复杂的关系约束.它确保任何损坏的数据都不会以任何方式进入数据库,并根据应用程序的约束进行验证.这些限制比你在数据库中检查的更复杂(例如,荷兰的银行账号必须是3到7个数字,或者 9或10,并且与校验位测试相匹配).

第3层可以进行验证.如果只有一个"客户端"本身并不是必需的,如果还有更多(特别是如果同一个数据库中存在"不太可信的"用户),它肯定也应该在数据库中.如果应用程序是关键任务的,那么还建议在数据库中进行完全验证以及触发器和约束,只是为了防范业务逻辑中的错误.数据库的工作是确保自身的完整性,而不是遵守特定的业务规则.

这个问题没有明确的答案,这取决于你的应用程序做了什么以及它有多重要.在银行应用程序中 - 验证所有3个级别.在互联网论坛中 - 仅检查需要的位置,并为具有性能优势的额外用户提供服务.


Bur*_*lid 11

这可能有所帮助:

  1. 前端(接口)验证用于数据输入帮助和上下文消息.这确保了用户具有轻松的数据输入体验; 并最小化验证正确性所需的往返次数.

  2. 应用程序级别验证用于业务逻辑验证.这些值是正确的,但它们是否有意义.这是你在这里的那种验证,你的大部分努力都应该在这方面.

  3. 数据库不进行任何验证.它们提供了约束数据的方法,其范围应该是确保参照完整性.参照完整性可确保您的查询(尤其是跨表查询)按预期工作.就像没有数据库服务器会阻止您输入4000数字列一样,它也不应该是检查年龄<40的地方,因为这不会影响数据的完整性.但是,确保被删除的行不会留下任何孤儿 - 这是参照完整性,应该在数据库级别强制执行.


Ger*_*lik 5

后端验证是必要的!

如果前端使用JavaScript验证,并且用户在浏览器中禁用JavaScript,则关闭验证.因此需要进行后端验证.