Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rest 保护对API端点的客户端调用的最佳实践_Rest_Security_Authentication_Client Side Attacks - Fatal编程技术网

Rest 保护对API端点的客户端调用的最佳实践

Rest 保护对API端点的客户端调用的最佳实践,rest,security,authentication,client-side-attacks,Rest,Security,Authentication,Client Side Attacks,我正在构建一个应用程序,在这个应用程序中,我需要在客户端前端应用程序中向一个外部API发出请求,而我对于如何最大限度地保证这一点有点不知所措,这样,只有有效的请求才能转发到此外部API,而不是任何人想要的 作为安全性的第一步,我已经这样做了,客户端应用程序不能直接与外部API对话,而是必须访问我们自己的服务器端API,然后服务器端API将请求代理给外部API,这样,访问外部API的凭据至少只存储在服务器端,而不是客户端 然而,这也导致了同样的基本问题——如何保护用于对从客户端应用程序到我们自己的

我正在构建一个应用程序,在这个应用程序中,我需要在客户端前端应用程序中向一个外部API发出请求,而我对于如何最大限度地保证这一点有点不知所措,这样,只有有效的请求才能转发到此外部API,而不是任何人想要的

作为安全性的第一步,我已经这样做了,客户端应用程序不能直接与外部API对话,而是必须访问我们自己的服务器端API,然后服务器端API将请求代理给外部API,这样,访问外部API的凭据至少只存储在服务器端,而不是客户端

然而,这也导致了同样的基本问题——如何保护用于对从客户端应用程序到我们自己的服务器端应用程序的请求进行身份验证的凭证/身份验证系统

问题是,这是一项在线餐厅订购服务,因此我们不希望用户在下订单之前使用用户名和密码进行身份验证,因此触发外部API调用的下单不会被任何用户名/密码方案所限制,并且必须可供前端应用程序的所有消费者使用

这里的最佳安全实践是什么?我已经启用了CORS白名单,这是一种最低限度的做法,因此理论上只有来自我们自己的域的请求才被我们的服务器端API端点允许,但是如果有人选择欺骗源URL,CORS就会被忽略

还有哪些其他选择?我确信我一定是遗漏了一些琐碎的东西,因为这肯定是一个非常常见的问题,有一个既定的最佳实践,但我只是不知怎么地没能找到它


谢谢大家!

最终,您的客户端需要在第三方API上执行一些操作

所以我们知道应该允许某些操作,根据您的描述,我们也知道不应该允许所有操作

所以你的安全应该基于这个前提。不要创建转发每个请求的哑代理,但是您的中间API应该根据您设置的规则专门允许您希望它允许的操作

如果您没有用户名和密码,那么您可能仍然有一些其他类型的规则来标识一个人(电子邮件/电话号码?),这意味着您可以创建一个身份验证系统


或者你的第三方服务应该在用户用信用卡完成订单后才调用,这种逻辑需要存在于你的API上。

作为API和移动安全的开发者倡导者,看到一个真正关心应用程序安全的开发者总是让我笑,特别是当他们已经表明已经做出了一些努力来确保这一点时,因此请接受我对你们努力的祝贺

我的答案 我正在构建一个应用程序,在这个应用程序中,我需要在客户端前端应用程序中向一个外部API发出请求,而我对于如何最大限度地保证这一点有点不知所措,这样,只有有效的请求才能转发到此外部API,而不是任何人想要的

因此,您还没有详细说明它是web应用程序还是移动应用程序,一旦我的专业知识依赖于移动和API安全性,我将假设它是移动应用程序

挑战 问题是,这是一项在线餐厅订购服务,因此我们不希望用户在下订单之前使用用户名和密码进行身份验证,因此触发外部API调用的下单不会被任何用户名/密码方案所限制,并且必须可供前端应用程序的所有消费者使用

这里有一个复杂的挑战需要解决,因为你有一个对公众开放的应用程序,没有任何类型的用户身份验证/标识,但需要访问下划线资源的规则,就像它是在用户身份验证和授权之后一样,但即使是这样,它仍然容易被滥用

为了理解为什么我需要澄清我在任何资历的开发人员中经常发现的一个误解,那就是谁访问API服务器与什么访问API服务器之间的区别

访问API服务器的用户和用户之间的差异 我写了一系列关于API和移动安全的文章,在这篇文章中,您可以详细了解访问您的API服务器的人与人与人之间的区别,但我将在此摘录其中的主要内容:

什么是向API服务器发出请求的东西。它真的是你的移动应用程序的真实实例,还是一个机器人、一个自动脚本或一个攻击者用Postman之类的工具在你的API服务器上手动戳来戳去

是移动应用程序的用户,我们可以通过多种方式进行身份验证、授权和识别,比如使用OpenID Connect或OAUTH2流

视为API服务器能够验证和授权访问数据的用户,并将什么视为代表用户发出请求的软件

因此,在您的情况下,您无法识别请求中的,因此您需要一个解决方案,该解决方案能够让API后端高度相信请求确实来自它所期望的,即您的应用程序的真实且未经修改的实例

可能的解决方案 我正在构建一个应用程序,在这个应用程序中,我需要在客户端前端应用程序中向一个外部API发出请求,而我对于如何最大限度地保证这一点有点不知所措,这样,只有有效的请求才能转发到此外部API,而不是任何人想要的

这需要非常先进的解决方案来确保适当的安全性,因此,正如您可能看到的那样,要实现这一点并不容易