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

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

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

主要有三个主题:authentication,授权,安全。 我将给予链接,只是简短的回答。 主题足够大,可以写几本书。

身份validation – 谁是谁提出请求。 authentication用户有很多“策略”。 请查看大多数pupul模块: http ://passportjs.org/docs。

当然,你可以单独实施一个或多个这样的策略。

对于无状态validation的jwt令牌非常方便。 如果你想自己编码(护照有这个策略)检查这个链接(networking中的许多) 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/总之不要存储在networking存储,因为XSS攻击。 使用cookies,当它们被正确configuration时,它们是安全的(更多在附加链接中),如果没有configuration,它们非常容易受到威胁。

授权:我们知道用户,但他只能访问一些资源。 请查看https://github.com/OptimalBits/node_acl有关于node_acl和passport的要点: https ://gist.github.com/danwit/e0a7c5ad57c9ce5659d2简短的护照authentication用户。 我们现在谁想要什么。 我们设置angular色和资源,定义angular色和资源关系。 然后我们为每个用户angular色设置。 模块将检查我们的用户权限。

安全:请在sails框架http://sailsjs.org/documentation/concepts/security的文档中find这个主题,它们描述了攻击以及框架如何防止形成它们。 我写关于快递:

DDOS:(你的问题的一部分“来自同一客户的太多请求”)“在API层,在预防方面没有太多可以做的事情。 这对于服务器pipe理员来说是最主要的。 总之使用负载均衡器。 如果它是一个IP(不是数百),那么黑名单或德利反应(开始看这个https://www.npmjs.com/package/delayed-request但我的事情,解决scheme必须更复杂)。

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

XSS:“恶意代理pipe理将客户端JavaScript注入您的网站的攻击types”不相信任何来自用户的数据。 总是validation,过滤,santize。 看看这个https://www.npmjs.com/package/xss

在帆的文件,有更多的攻击types,但以上是最stream行的。

使用快速会话+护照( http://passportjs.org/ )基本上,你应该有一个login到网站,而且只有经过authentication的用户才能打电话给REST apis。 现在…如果你不想login,比你无法真正保护的API,因为网站的devise是开放的。 你没有指定太多的信息,所以很难说比这更多。

此外,DoS攻击无法受到您的代码的保护,通常它不是应用程序服务器(在您的情况下是node.js express)提供此类保护的责任。 如果有人希望您的网站通过DoS攻击而不是其他层(请参阅https://en.wikipedia.org/wiki/Denial-of-service_attack#Defense_techniques ),这主要是由路由器/交换机/在…上执行。