我有一个困扰我很长一段时间的问题。也就是说,我正在为某个组织开发一个网站,公民和其他法人实体将输入大量数据。就此而言,我想尽可能地保护应用程序免受用户条目和某种故障或恶意使用的影响。
思路如下。我有一个实体,我们称它为 EntityA,它是 EntityB 的父级。两个实体都将唯一标识符 (GUID) 作为其在数据库中的数据类型(主键)。EntityB 有一个指向 EntityA 的外键。当执行 Create 操作的 HTTP GET 版本时,会检查以下规则并且必须满足所有三个规则:
- 传递给操作的 ID 不得等于 Guid.Empty(此 ID 是 EntityA.Id 中的值)
- EntityA 必须存在(EntityA.Id == ID)
- EntityB 不能存在(EntityA 和 EntityB 只能是一对一的关系)。
当向用户显示数据输入屏幕时,这一切都很好。我的问题是,我应该在 POST 上再次执行检查吗?如果我有一个恶意用户,他/她可以使用 Fiddler 作为代理,并在让数据通过应用程序之前更改数据。因此,可以在 POST 上规避上述规则。有没有人对上述情况有一个好的策略?我应该再次重新检查这些值(再次返回数据库以执行相同的检查)还是应该尝试存储,例如 TempData 中的 ID 并在 POST 上再次访问它以将该 ID 与传递给操作的 ID 进行比较,或者添加到EntityB模型?有一个更好的方法吗?
因此,目标是避免重复代码并创建安全代码。
编辑:最好避免再次访问数据库。