我正在开发基于NodeJs / Express的网站项目,对于某些UI部分,我正在使用Jquery ajax请求来获取辅助数据。
我们如何处理对我们的Rest API端点的一些基本控制,这些端点被浏览器用于ajax调用?我在考虑某种令牌授权,但是一旦被拦截,它也可以被其他客户端(脚本等)使用,那么我们如何保护服务器免受不必要的请求呢?在这种情况下,还应使用其他哪些控件(识别来自同一客户端,客户端黑名单等的太多请求)?
有三个主要主题:身份验证,授权和安全性。我将给出链接,并仅给出简短答案。主题足够大,可以写几本书。
身份验证-谁是发出请求的人。身份验证用户有许多“策略”。请为此检查最常用的模块: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的文档中,攻击类型更多,但以上几种最为流行。