当前位置: 首页 > 面试题库 >

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

崔恺
2023-03-14
问题内容

我正在开发基于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的文档中,攻击类型更多,但以上几种最为流行。



 类似资料:
  • 问题内容: 我目前正在为一个非常繁忙的互联网网站构建API。它是用PHP和MySQL编写的。现在,这是我正在编写的第一个API,允许人们远程访问其帐户。API联机后,开发人员将能够从中编写自己的工具。 现在我可以使用该API,但是不确定它是否完全安全。 可以使用的示例URL是: :将是用户的实际用户名 :将是其实际密码的MD5编码字符串。 如果详细信息匹配,则返回结果,否则返回错误。 所有外部输入

  • 我正在实现一个Nodejs后端API。其中一些需要在访问之前进行身份验证。为此,我选择密钥斗篷服务器作为身份服务器。我使用npm keycloak-connect库来集成节点服务器和密钥斗篷服务器。现在身份验证很好。 问题是,当我使用'http://localhost:8080/auth/realms/test-realm/protocol/openid连接/注销此API。密钥斗篷服务器表示令牌不

  • 但当我通过api Gateway+lambda+NodeJSV8部署我的api时。我已经解决了用于调试的nodejs处理程序函数参数(https://y0gh8upq9d.execute-api.ap-south-1.amazonaws.com/prod)的JSON for event and context varaibles。 lambda函数是 API网关详细信息 使用Lambda代理集成-

  • API流改变了吗? 我再也不能为搜索曲目或艺术家进行简单的公共API调用了? 此外,我在Spotify文档中看到,如果查询字符串中提供了market=from_token,则需要授权。否则,可选。

  • 我问了几个问题试图解决这个简单的问题,但似乎没有任何效果。 有私人/公共帖子的推荐方式是什么?我想有一个网站,如果作者/编辑/管理员登录在每个私人帖子和公共帖子是可见/搜索。如果用户未登录,则仅可查看公共帖子。 我想过/尝试过许多方法来做这件事。一个简单的方法,我实现了这种方式,使用WP_Query包括/排除登录/退出时具有自定义字段“私人”的所有帖子。 虽然这工作得很好,但我有两个问题,它的安全

  • 问题内容: 是否可以定义每个日志语句中包含的唯一请求ID,而无需将记录器交给每个方法/函数调用? 使用的技术:NodeJS,Express,Winston 问题答案: 已编辑 最后,我创建了一个库,可以完成所有工作。 https://github.com/davicente/express-logger-unique-req- id 它是Winston库的包装,因此您可以以相同的方式使用它。 让我