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

时间:2015-09-26 18:32:22

标签: node.js ajax rest api express

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

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

2 个答案:

答案 0 :(得分:13)

主要有三个主题:身份验证,授权,安全性。我会给出链接,只有很短的答案。主题足以写几本书。

身份验证 - 谁是提出请求的人。有许多策略'验证用户。请检查大多数pupular模块: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攻击,请不要将其存储在网络存储中。使用cookie,正确配置后,它们是安全的(更多的是附加链接),如果没有配置,它们就会受到威胁。

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

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

DDOS :(问题的一部分"来自同一客户的太多请求")"在API层,没有多少可以通过预防方式完成&# 34 ;.这对于服务器管理员来说是最受欢迎的。简而言之,使用负载均衡器。如果它是一个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

在帆的文档中,有更多的攻击类型,但上面是最受欢迎的。

答案 1 :(得分:0)

使用快递+护照(http://passportjs.org/) 基本上你应该登录网站,而只有经过身份验证的用户才能调用REST api。 现在......如果您不想登录,那么您无法真正保护API,因为网站设计是开放的。 您没有指定太多信息,因此很难说更多信息。

DoS攻击也不能受到您的代码的保护,通常它不是应用服务器(在您的情况下为node.js express)的责任,以提供此类保护。如果有人希望你的网站遭受DoS攻击,那么没有其他层(参见https://en.wikipedia.org/wiki/Denial-of-service_attack#Defense_techniques),这主要意味着它取决于路由器/交换机等......实施。