假设我们有一个简单的节点JS后端,与标准的NoSQL文档存储(如CouchDB)配对。由于我们的数据库只是一个没有架构的文档密钥库,因此可以插入任何内容。而且由于我们的服务器也是基于JSON构建的,因此最终从具有JSON有效负载的客户端进入的POST请求最终会直接存储到我们的数据存储中。
这当然非常方便,适用于轻量级应用程序。我一直想知道,除了为每个可能的插入端点编写代码以验证每个POST或PUT请求是否格式良好之外,还有什么可以阻止攻击者启动其开发人员控制台并欺骗POST / PUT请求,允许他们将他们希望的任何垃圾数据插入我们的数据存储区?以这种方式破坏应用程序的数据并不困难。
显然,基于令牌的身份验证可以确保只有经过身份验证的用户才能访问这些服务端点,但这并不妨碍他们使用有效请求所具有的相同HTTP标头来欺骗这些请求。使用今天的浏览器开发人员工具,这一切都非常简单。
在像Java这样的传统服务器语言中,JSON PUT和POST被编组到一个高度结构化的基于类的对象。其负载与这些格式不匹配的请求将被HTTP错误拒绝。
有没有人知道节点的工具或范例,以确保这样的请求符合某些基本结构标准?