如何在NodeJS中验证客户端文本?

时间:2018-08-22 20:52:04

标签: javascript node.js express

我正在建立待办事项清单,而我面临的问题之一是验证是否已核对正确的待办事项。我想到了为每个工作使用唯一的ID,但是用户可以将ID更改为另一个任务的ID。我该怎么做以确保用户不会因核对任务而感到厌烦?

我的程序有缺陷:

用户检查任务->获取任务ID->后端的匹配ID

编辑: 所有任务都是预先创建的。而且用户没有能力创建新的。

2 个答案:

答案 0 :(得分:0)

如果这曾经碰到您的后备服务器,则应始终假定用户正在向您发送垃圾数​​据或试图入侵您的系统。

简而言之:始终验证来自不受信任来源的输入。

某些语言(例如C#)提供模型验证作为处理流程的一部分,因此在到达操作/控制器时会进行一些初始模型验证。

在这种情况下,用户向您发送ID和与该任务有关的操作:

{
   Id: "15f52b9f-3a09-4e56-adcf-c837ca4c92eb",
   Status: "completed"
}

您应验证:

  1. 该项目存在。
  2. 该项目属于用户
  3. 用户有权编辑此项目
  4. 状态是有效类型(它们可能会向您发送“ blah”作为状态)

如果其中任何一个失败,您就会向用户发送一条错误消息(或400条错误,并告诉他们什么地方错了)

编辑:阅读以下评论后:

有一个简单的规则。永远不要信任用户,用户输入或您无法100%控制的任何内容。

在网络世界中,永远不要信任浏览器中,周围或发送的任何内容。用户对其具有完全控制权,包括cookie,DOM,本地存储等。

在处理用户输入时,始终在服务器上进行验证没有例外。

您始终可以进行双重验证,即在客户端和服务器端进行验证,但是客户端仅限于数据或数据格式(例如,日期或日期的MM / DD / YYYY格式)的基本业务规则数字必须小于1000)

您可以在前端进行操作,但仍然需要在后端进行验证。

答案 1 :(得分:0)

看到任务是事先创建的,那么每个任务都应该获得唯一的不可变ID。要在Javascript中实现,请使用:

Object.freeze()

根据Mozilla开发人员网络:

  

Object.freeze()方法冻结一个对象:也就是说,阻止向其添加新属性;防止现有属性被删除;并防止更改现有属性或其可枚举性,可配置性或可写性,并且还防止更改原型。该方法返回传递的对象。

文档的链接为here