在呈现UI之前,是否应该验证来自数据库的数据?

时间:2016-12-27 09:23:34

标签: c# asp.net

我们是否应该在UI中显示时验证从数据库中获取的数据?

我在保存前验证客户端和服务器端的表单。

但是我应该在UI上展示之前验证数据吗?

3 个答案:

答案 0 :(得分:1)

不,您应该验证输入并努力使您的验证逻辑可靠。因此,您将能够盲目地依赖您的输出。

有些人可能会反驳。例如,假设我已经定义了一个输入,有人在那里插入了一些JavaScript代码段。 当该文本来自数据库时,我会在将整个文本设置为输入之前对其进行验证吗?,我不可能在我的UI层执行JavaScript。

有很多案例就像我上面描述的那样,在将数据绑定到用户界面之前,应该优先考虑防御行为......

创建/更新操作应存储先前已验证和/或已清理的数据。

总之,我发现某种偏执和坏习惯会验证输出:这可能意味着你的验证毕竟没有验证。

@marc_s在问题中注释掉了:

  

是的,当然!毕竟 - 黑客可能已经篡改了你的   数据库和存储的恶意代码在数据库表中 - 总是如此   假设数据不好 - 直到被证明是无辜的。总是验证,   永远不要假设数据或用户输入“有效”且无害

我觉得这有其他解决方案:

  1. 良好的备份策略和良好系统管理员的监控可以在几秒或几分钟内恢复这种情况,几乎没有数据丢失。
  2. 如果黑客可能篡改了数据库服务器,它也可能窃取了系统密码的其他部分,甚至丢弃了数据库......这可能是因为系统安全配置错误,缺乏传输级加密和许多其他安全细节。我不会过度设计我的项目以填补良好安全环境的空白。

答案 1 :(得分:1)

<块引用>

我们是否应该在显示时验证从数据库中获取的数据 在用户界面中?

不,您的数据库中的数据应该已经过验证。在向下移动的每一层,数据在 UI、API 服务器和数据库中进行验证。最重要的验证级别是数据库架构,而 UI 和 API 验证层作为一种提前失败的方式,以避免进一步处理无效信息。

<块引用>

但是如果黑客破坏了数据库中的数据怎么办?

数据库有办法确保数据的完整性和可靠性(架构、校验和、冗余、监控工具等)。 UI 和 API 层不需要在验证数据时提前失败。

答案 2 :(得分:0)

当数据在您无法完全控制的领域之间移动时,您应该始终对其进行验证。

例如,您无法控制用户可以输入的内容,因此您必须验证他们的数据。

当涉及到数据库时,如果其他人维护架构,如果使用您无法控制的流程添加数据,或者如果有新的业务需求,那么您应该验证数据,然后再将其显示给用户