如何尽可能混淆 OAUTH 获取请求凭据?

问题描述 投票:0回答:1

免责声明:这是一个概念/设计问题,但我希望社区能够足够开放地让我发布它,我自己已经为这个想法奋斗了很长时间,并且非常感谢一些经历过外部对此事的想法。

我构建了一个无人值守的非交互式 JS 客户端,以浏览器扩展的形式在后台运行。

主要限制是:非交互式,据我所知,几乎不可能验证客户端的真实性。

JS 客户端针对 OAUTH 2.0 API 执行获取 POST 请求,目前使用非常经典的硬编码“不在现实生活中使用”client_credential 模型,其中客户端 id 和密钥直接在代码中输入。

尽我所能思考这个概念问题,将其转变为基于证书的令牌声明不会增加情况的安全性,事实上恰恰相反,因为攻击者仍然可以很容易地获取插件源代码,提取证书并冒充扩展发送恶意数据包。

所以基本上我目前的想法是混淆整个获取请求,包括“fetch”关键字本身,使其尽可能困难,并且对于恶意用户获取敏感凭据来说尽可能难以理解。

为了执行这个想法,我为初学者考虑了以下几点:

  • 将主体参数名称的每个字母转换为函数的结果,例如:

    "client_secret" = (f^-1 o f)(C) + (g^-1 o g)(L) + ... + (x^-1 o x)(S) 

因此,我不会在源代码中编写“C”,而是为每个字母编写 f(“C”),它看起来像一些复杂的“”“哈希””。

构图不必是附加的,可以分成多行等,以使其更难区分我真正在做什么,但这只是为了说明。

  • 每个参数的值将遵循类似的模式,它们将以密码链结果的形式存储到本地文件中。例如:

    "client_id.value" = DES(AES(Blowfish(MycustomfunctionA(MycustomfunctionB...(client_id))))) 

然后是“fetch”关键字本身的问题,这会引起任何攻击者的兴趣,目前我还没有一个明确的想法,因为这意味着将代码动态加载到与已经执行的代码相同的上下文中,那时它开始变得有点失控,但在某种程度上仍然很有趣......

所以,是的,这基本上就是我现在的方向,我显然不确定我在做什么,这就是为什么我来询问专业人士是否有更好的方法,更聪明的方法来解决这个问题非常有问题....

感谢大家的耐心/理解。

javascript security oauth client credentials
1个回答
0
投票

我的想法:

  1. 混淆并不安全。有人最终会弄清楚你在用代码做什么。

  2. 您混淆了发送 HTTP 请求的代码。攻击者可以嗅探从您的分机发出的流量。她将从那里获取所有信息,甚至不需要理解您的代码。

  3. 也许您应该查看动态客户端注册。每个浏览器扩展实例都会注册为单独的客户端,以便您可以更轻松地控制正在发生的事情(例如阻止可疑客户端)。

基本上,您是对的 - 您应该将从扩展程序传入的所有流量视为潜在恶意,并且后端应该相应地解决该问题。

© www.soinside.com 2019 - 2024. All rights reserved.