我正在构建一个B2B服务,其API可以由第三方在订阅的基础上访问。基本上,我们提供了一个可定制的小部件,我们的客户可以将其嵌入到他们的网站上,使其对他们的客户可用(例如,打开模态的按钮)。虽然如何在传统的网络应用程序中实现这一点很清楚,但我不确定如何在单页应用程序中保证这一点。在没有OAuth中使用的重定向URI的情况下,是否可以实现这一点?也就是说,模态触发了对API的AJAX请求,我们希望确保它来自授权来源的脚本,而没有重定向。当然,我们可以简单地检查Origin头,但有什么可以防止某人在后台手动构建带有这样一个头的请求,即使他们不能在浏览器中这样做。
问题
虽然如何在传统的网络应用程序中实现这一点很清楚,但我不确定如何在单页应用程序中保证这一点。
通过web应用程序,您只需要查看html源代码就可以找到API密钥或其他机密。即使你使用传统的网络服务器,也可以获得cookie来自动攻击它
虽然本系列关于移动API安全技术的文章是在移动设备的背景下撰写的,但所使用的一些技术在其他类型的API中也有效,如Web/SPA应用程序的API,您可以看到如何使用API密钥、OUATH令牌和HMAC机密来保护和绕过API。
可能的解决方案
您可以尝试使用Javascript Obfuscator来查找API密钥,但请记住,这只会延迟攻击者的成功。
那么,我该如何阻止攻击者呢
残酷的事实是…你不能!!!
但您可以尝试使用谷歌的reCAPTCHA V3,它在后台工作,因此不需要用户交互。这里的缺点是,你所有的B2B客户都需要在他们网站的所有页面上实现它,因此可能不是你的用例的方式。。。
reCAPTCHA V3:
reCAPTCHA是一项免费服务,可保护您的网站免受垃圾邮件和滥用。reCAPTCHA使用先进的风险分析引擎和自适应挑战来防止自动化软件在您的网站上进行滥用活动。它可以做到这一点,同时让您的有效用户轻松通过。
如果您的B2B解决方案真的需要不惜一切代价保护它,那么您需要使用Web应用程序防火墙(WAF)和用户行为分析解决方案(也称为UBA),它们使用人工智能和机器学习来防止滥用,但它们不能保证100%阻止,而且两者都有误报。
WAF:
web应用程序防火墙(WAF)过滤、监视和阻止往返于web应用程序的HTTP流量。WAF与常规防火墙的区别在于,WAF能够过滤特定web应用程序的内容,而常规防火墙充当服务器之间的安全门。通过检查HTTP流量,它可以防止源于web应用程序安全缺陷的攻击,如SQL注入、跨站点脚本(XSS)、文件包含和安全错误配置。
UBA:
Gartner定义的用户行为分析(UBA)是一个关于检测内部威胁、定向攻击和金融欺诈的网络安全过程。UBA解决方案着眼于人类行为模式,然后应用算法和统计分析从这些模式中检测出有意义的异常——表明潜在威胁的异常。UBA不是跟踪设备或安全事件,而是跟踪系统的用户。像Apache Hadoop这样的大数据平台正在增加UBA的功能,允许它们分析价值PB的数据,以检测内部威胁和高级持久威胁。
结论
最终,您只能在尽最大努力的基础上保护B2B后端,这必须与其对业务的价值成比例。
由于其设计工作方式的原因,不存在适用于web的100%解决方案!!!
请求来自哪里或由谁提出请求重要吗?如果后者需要确认,那么您可以要求在请求的同时提供授权令牌。通常情况下,您可以解码令牌并与授权方确认匹配。
因此,基本上您想要系统安全性,可以使用Oauth2.0 grant type=客户端凭据。这将确保您的api只被授权的客户端使用。
它的工作非常简单,客户端使用client_id和client_pass访问Oauth2.0服务器,Oauth服务器会向您返回一个令牌,同一个令牌客户端会传递给服务器,当您通过使用server_id、server_pass+令牌访问Oauth服务器来验证该令牌时,它会使用客户端id返回验证,在此基础上,您可以公开您的服务。您不需要担心重定向,因为客户端凭据不需要重定向。
我建议将OAuth2 Auth Code与PKCE一起使用。它旨在允许安全地从SPAs(和本地应用程序)调用API。基本上,它依赖于这样一个事实:调用API的SPA有一些众所周知的URL,这就是为什么不允许在SPA之外使用它。