小编典典

NodeJS / express-公共API端点的安全性

node.js

我正在开发基于NodeJs / Express的网站项目,对于某些UI部分,我正在使用Jquery ajax请求来获取辅助数据。

我们如何处理对我们的Rest
API端点的一些基本控制,这些端点被浏览器用于ajax调用?我在考虑某种令牌授权,但是一旦被拦截,它也可以被其他客户端(脚本等)使用,那么我们如何保护服务器免受不必要的请求呢?在这种情况下,还应使用其他哪些控件(识别来自同一客户端,客户端黑名单等的太多请求)?


阅读 327

收藏
2020-07-07

共1个答案

小编典典

有三个主要主题:身份验证,授权和安全性。我将给出链接,并仅给出简短答案。主题足够大,可以写几本书。

身份验证-谁是发出请求的人。身份验证用户有许多“策略”。请为此检查最常用的模块:http
://passportjs.org/docs 。

当然,您可以单独使用一种或多种这种策略。

对于无状态身份验证,jwt令牌非常方便。如果您想自己编写代码(Passport具有此策略),请检查此链接(网络上的许多链接之一)https://scotch.io/tutorials/authenticate-
a-node-js-api-with-json-web-tokens。

如何防止令牌拦截?始终使用https并设置令牌到期时间短。

在哪里存储令牌客户端?有关详细信息,请参见此https://stormpath.com/blog/where-to-store-your-jwts-
cookies-vs-html5-web-storage/简而言之,由于XSS攻击,请勿将其存储在Web存储中。使用cookie,如果正确配置它们,它们是安全的(在附加链接中有更多信息),如果未配置它们,则它们很容易受到威胁。

授权:我们知道用户,但是他只能访问某些资源。请检查https://github.com/OptimalBits/node_acl
带有node_acl和护照的要领:https
://gist.github.com/danwit/e0a7c5ad57c9ce5659d2
简而言之,护照认证用户。我们现在谁想要什么。我们设置角色和资源,并定义角色和资源关系。然后我们为每个用户设置角色。模块将检查我们的用户权限。

安全性:请在Sails框架文档http://sailsjs.org/documentation/concepts/security中查找该主题,它们描述了攻击以及框架如何阻止攻击。我写快递:

DDOS
:(您的问题“来自同一客户端的太多请求”的一部分)“在API层,预防工作无能为力”。这是服务器管理员最常遇到的问题。短期使用负载均衡器。如果它是一个IP(不是数百个IP),则将其列入黑名单或deley响应(首先查看此https://www.npmjs.com/package/delayed-
request,但我认为该解决方案必须更复杂)。

CSRF:“强制最终用户在Web应用程序后端执行不必要的操作的攻击类型”。看看这个模块https://www.npmjs.com/package/csrf

XSS:“恶意代理设法将客户端JavaScript注入您的网站的攻击类型”不信任来自用户的任何数据。始终进行验证,过滤和修改。看看这个https://www.npmjs.com/package/xss

在Sail的文档中,攻击类型更多,但以上几种最为流行。

2020-07-07