security - Rest API 实时棘手问题 - 需要答案
问题描述
我最近接受了一个跨国公司技术小组的采访,他们问了我与 RestAPI 相关的不同问题,虽然我回答了但不知道这些问题是否正确,但我能够回答除以下 2 个问题之外的所有问题。有人可以用实时示例回答我的问题吗
1)当有人从 Postman 发送请求时,我如何保护我的 Rest API。用户在标头中提供所有正确信息,如会话 ID、令牌等。我的回答是:在请求标头中发送的用户令牌应该关联使用成功通过身份验证的用户信息,如果请求来自邮递员或应用程序调用这些 API,则只有用户将被授予访问权限。(小组对我的回答说不)
2)我如何处理 Rest API 中的并发性意味着如果多个用户试图在同一给定时间访问 API(例如,多个发布请求来更新表中的数据)你将如何确保一个请求在一次,因此这些值会根据不同用户的请求进行更新。2)我的回答是:在 Entitiy 框架中,我们有一个名为 DbUpdateConcurrencyException 的类,该类负责处理并发性并一次服务一个请求。我不确定我的上述两个答案,我也没有在谷歌上找到任何具体的答案。
感谢您的专家帮助。
谢谢
解决方案
1)不可能,如果用户具有适当的凭据(例如可以观察和复制正常请求),来自 Postman 或任何其他客户端或代理(Burp、ZAP 等)的请求与浏览器请求无法区分。无法对客户端应用程序进行身份验证,只能对客户端用户进行身份验证。
2) 如果一个 Web 应用程序一次只能为一个客户端提供服务,那就太糟糕了。想想像 Facebook 这样的大流量。:) 在许多(也许是大多数?)堆栈中,每个请求都有自己的线程(或类似线程)运行,并在请求-响应结束时完成。这些线程不应该在运行时直接相互通信。数据一致性是持久化技术的要求,即。例如,如果您使用数据库,它必须保证数据库查询一个接一个地运行。请注意,如果应用程序运行多个查询,则需要在数据库级别使用数据库事务或锁以保持一致性。但这根本不是关于客户端请求,而是关于如何使用持久性技术来实现一致的数据。使用传统的 RDBMS 很容易,
推荐阅读
- party - 当甚至没有对象 X 时,在 partykit::ctree 中找不到对象“X”的区分大小写错误
- javascript - 故事书:在 .attrs 之后不使用反引号时,对象作为 React 子项无效
- r - R从rda数据框中提取标签
- c - 拆解二元炸弹第三阶段逻辑难理解
- html - Bootstrap 折叠的导航栏不会对点击做出反应
- node.js - 如何将保存到 S3 的文件推送到前端进行下载?
- python - 如何在 Python 中使用 POST URI?
- regex - 用于解析控制文件的正则表达式
- jquery - 无法在 Django 中触发 Ajax 点击功能
- python - 无法在虚拟环境中安装库