请记住,OAuth不是关于防止假冒,而是更多关于保护凭据。第三方为您验证了用户的身份,而不会暴露用户的凭据。由于代币不是凭证,黑客可以造成的伤害量和他的行动窗口是有限的。
但是对于您的应用程序而言, OAuth本质上并不比常规用户名/密码身份验证更安全。在客户端应用程序上,您的所有代码都可供全世界查看!正如您所提到的,客户端加密是一个有问题的策略。
虽然没有既定的保护客户互动的最佳实践,但这里有一些方法可以最大限度地减少您的风险:
1)SSL:银弹?也许。您在站点和请求中使用SSL的次数越多,用户的请求就越安全。老实说,我相信所有特权请求都应该由加密请求发出。
2) 令牌寿命短:令牌的寿命越短,嗅探它的激励/优势就越小。
OAuth 2.0 通过将身份验证令牌交换为身份验证令牌的刷新令牌来创建身份验证之外的持续聊天。作为开发人员,您现在正在开发一个聊天应用程序,该应用程序执行很多“你的令牌是什么,这是另一个令牌,向我要一个令牌,这是你的新令牌......所以你想要什么?” ……“哎呀,时间到了,你的刷新令牌呢?”
如果这听起来很痛苦,那确实是。OAuth 2.0 旨在使开发人员的流程更轻松。但重要的一点是,代币的寿命越短,黑客就越难维护欺诈身份。
刷新令牌参考
3) 加强你的领域:想要减少嗅探者滥用你盔甲缝隙的机会吗?不允许跨域请求!
当然,我们经常有分布式环境。但是,如果您的 Facade 位于客户的域中,那么您的曝光就会减少(单词选择有问题)。
强迫黑客使用你的域名,限制他们的创造力。
4) 使用 3rd 方 API 尽可能多地维护您的访问权限: Google和Facebook API 和服务已经过单元测试、实战测试和演进。你越能依靠他们来维护你的用户的身份,你做的工作就越少,你获得的机会就越少。
5)检查IP地址:几乎任何东西都可以伪造,但黑客必须知道IP地址是你验证的一部分。这是所有实践中最不可靠的,但结合 1,2 或更多,黑客可以利用的差距越来越小,努力的回报也逐渐消失。
6)使用“秘密”或第二个参数:你可以传递你的用户而不是令牌。您可以传递自己的 Alter-Token。
假设它是一个来回传递的 ID 数据。以不明显的方式命名参数。将其设为数字(例如年龄、身高、地址)。重要的一点是,您的黑客对对方的要求知之甚少或一无所知!
您可以通过具有 3 个作为安全性的参数来抛出一个严重的活动扳手。
7)不要给出错误信息来通知黑客他们已经被抓到了。给出超时消息而不是“知道了!” 如果入侵者没有意识到欺诈行为被抓住了,他们也不会适应。
我不能说太多—— SSL 省去了很多麻烦。
注意:我见过的所有客户端提供商都允许访问他们的 API 而不会暴露 Secret。秘密不应该暴露在客户端上。
- 客户端上暴露的任何数据都可以闪烁
- 您使用的任何加密算法都将在客户端上公开。