我正在建立待办事项清单,而我面临的问题之一是验证是否已核对正确的待办事项。我想到了为每个工作使用唯一的ID,但是用户可以将ID更改为另一个任务的ID。我该怎么做以确保用户不会因核对任务而感到厌烦?
我的程序有缺陷:
用户检查任务->获取任务ID->后端的匹配ID
编辑: 所有任务都是预先创建的。而且用户没有能力创建新的。
答案 0 :(得分:0)
如果这曾经碰到您的后备服务器,则应始终假定用户正在向您发送垃圾数据或试图入侵您的系统。
简而言之:始终验证来自不受信任来源的输入。
某些语言(例如C#)提供模型验证作为处理流程的一部分,因此在到达操作/控制器时会进行一些初始模型验证。
在这种情况下,用户向您发送ID和与该任务有关的操作:
{
Id: "15f52b9f-3a09-4e56-adcf-c837ca4c92eb",
Status: "completed"
}
您应验证:
如果其中任何一个失败,您就会向用户发送一条错误消息(或400条错误,并告诉他们什么地方错了)
编辑:阅读以下评论后:
有一个简单的规则。永远不要信任用户,用户输入或您无法100%控制的任何内容。
在网络世界中,永远不要信任浏览器中,周围或发送的任何内容。用户对其具有完全控制权,包括cookie,DOM,本地存储等。
在处理用户输入时,始终在服务器上进行验证没有例外。
您始终可以进行双重验证,即在客户端和服务器端进行验证,但是客户端仅限于数据或数据格式(例如,日期或日期的MM / DD / YYYY格式)的基本业务规则数字必须小于1000)
您可以在前端进行操作,但仍然需要在后端进行验证。
答案 1 :(得分:0)
看到任务是事先创建的,那么每个任务都应该获得唯一的不可变ID。要在Javascript中实现,请使用:
Object.freeze()
根据Mozilla开发人员网络:
Object.freeze()方法冻结一个对象:也就是说,阻止向其添加新属性;防止现有属性被删除;并防止更改现有属性或其可枚举性,可配置性或可写性,并且还防止更改原型。该方法返回传递的对象。
文档的链接为here