Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何验证NodeJS中的客户端文本?_Javascript_Node.js_Express - Fatal编程技术网

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

Javascript 如何验证NodeJS中的客户端文本?,javascript,node.js,express,Javascript,Node.js,Express,我正在建立一个待办事项列表,我面临的问题之一是验证是否已勾选了正确的待办事项。我曾想过为每个待办事项使用唯一的ID,但用户只需将ID更改为另一个任务的ID即可。我可以做些什么来确保用户不会在检查任务时发脾气 我有缺陷的流程: 用户在后端签出任务-->获取任务ID-->匹配ID 编辑: 所有任务都是预先创建的。而且用户无法创建新的数据。如果这涉及到您的备份服务器,您应该始终假定您的用户正在向您发送垃圾数据或试图入侵您的系统 简而言之:始终验证来自不受信任来源的输入 有些语言,例如C#,提供模型验证

我正在建立一个待办事项列表,我面临的问题之一是验证是否已勾选了正确的待办事项。我曾想过为每个待办事项使用唯一的ID,但用户只需将ID更改为另一个任务的ID即可。我可以做些什么来确保用户不会在检查任务时发脾气

我有缺陷的流程:

用户在后端签出任务-->获取任务ID-->匹配ID

编辑:
所有任务都是预先创建的。而且用户无法创建新的数据。

如果这涉及到您的备份服务器,您应该始终假定您的用户正在向您发送垃圾数据或试图入侵您的系统

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

有些语言,例如C#,提供模型验证作为处理管道的一部分,因此在模型到达操作/控制器时进行一些初始模型验证

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

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

您应该验证:

  • 该项已存在
  • 该项属于用户
  • 用户具有编辑此项目的权限
  • 状态为有效类型(他们可以将“blah”作为状态发送给您)
  • 如果其中任何一个失败,您将向用户发送一条错误消息(或400错误和一条消息,告诉用户出了什么问题)

    编辑:阅读下面的一些评论后:

    有一条简单的规则。永远不要相信用户、用户输入或任何你无法100%控制的东西

    在网络世界中,永远不要相信浏览器中、周围或从浏览器发送的任何内容。用户可以完全控制它,包括cookie、DOM、localstorage等

    处理用户输入时,始终在服务器上验证它无例外。

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


    您可以在前端执行这些任务,但仍然需要在后端验证它们。

    由于任务是在创建之前创建的,因此应向每个任务分配一个唯一的不可变ID。要在Javascript中实现这一点,请使用:

    Object.freeze()
    
    根据Mozilla开发者网络:

    方法冻结一个对象:也就是说,防止向其添加新属性;防止现有财产被移除;并防止现有属性或其可枚举性、可配置性或可写性发生更改,同时也防止原型发生更改。该方法返回传递的对象


    指向文档的链接为

    ,然后还要检查待办事项是否由该用户创建。并将用户id添加到后端。我很抱歉没有提到所有这些任务都是预先创建的。我将编辑我的帖子。我认为你不应该给用户更改id的权限。他可以更新任务,但这是神圣的。对于我的待办事项列表应用程序,我使用mongoose和mlab分配给唯一性本身的id,我没有给用户任何访问权限。他的运动场地有限。你可以查看NetNinja的youtube视频。它使用相同的堆栈和方法。因此用户可以查看源代码、更改ID和。。。。还有什么。谁在乎。这不是你的任务清单。如果你真正关心的是删除别人的待办事项,那么你就完全错了。您是否有一个表,可以通过用户ID连接项目ID?@RokoC.Buljan这是一个很好的观点。那么,当我试图使我的应用程序安全时,我应该在哪里划定界限呢?我有一个关于这方面的问题。查看内容怎么样?例如,如果数据库中的id等于管理员的id,则只有某些用户才能查看管理员功能。什么会阻止用户进入URL并修改id并将其设置为与管理员相关的id,从而显示与管理员功能相关的内容?@InoCuro id应该来自JWT或类似的,而不是传递的id。不幸的是,我没有使用JWT。我使用了localstorage,基本上说如果这个localstorage id=='admin'显示内容,但我认为如果用户有权修改localstorage,这可能是有害的。localstorage不安全,而且可以轻松修改,唯一可以信任的是签名id,比如JWT中的id,或者会话cookie(cookie值是签名的)@InoCuro您应该使用授权/身份验证方案。通常这是以饼干的形式。是的,有人可以使用其他人的cookie,或者单击jacking,但也可以使用防伪密钥。此外,Cookie具有过期日期,并在服务器端进行验证,以获取用户名、角色/声明。除非你计划推出自己版本的“sudo”命令,否则你不应该在所有事情上都使用超级用户“admin”。虽然这将用于创建固定ID,但它不会阻止用户操纵本地存储或向服务器发送伪造数据。这也不会阻止用户阻止该行代码,对吗?@AdamHess每个任务都有一个不可变的ID!这是一个默认的验证。任何更改任务ID的尝试都将导致错误。参见示例逻辑:
    consttaskid={task1:“洗衣房”
    };const FREEZETASKID=Object.freeze(task1);FREEZETASKID.task1=“洗碗”//在严格模式console.log(FREEZETASKID.task1)中引发错误;//预期输出:“洗衣房”@JudeDesir阻塞代码行将影响整个构建!如何确保服务器和客户端上的ID相同,并且用户不会发送垃圾数据?除此之外,您还可以通过开发人员工具操作本地资源,而不仅仅是javascript。