我是一名程序员,正在开发一个应用程序,其中唯一的选择/vs/deadline 是对 url 参数值实施对称加密。这些数据本质上是不敏感的,但我们需要防止销售代理偷看对方的线索。(密钥是在会话创建时生成的,并且具有很强的加密能力。)会话预计会频繁结束。
角色层次结构是Manager--> Supervisor--> Agents
. 数据结构目前没有以严格强制谁可以看到什么的方式来解释这些角色。从数据库中获取这些信息并非易事。(递归数据库。)
我知道这种技术作为对参数操纵的防御在列表中排名靠后。什么会是更好的技术?
约束:
基于角色的检查不是一种选择。
[附加信息] 在我进行任何更改之前构建并发送到客户端的 url 如下所示:
https://www.example.com/agent/?producerId=12345
这里的具体威胁面是针对?agentId=12345
. 代理 ID 被唯一分配给每个代理。因此,如果代理 A 想要查看代理 B 的统计数据,他可以输入 agentId=22222 以查看该代理的报价和当前销售统计。
同样,基于角色的检查对我来说不是一个选项:我无法对数据库或持久层进行更改。
我的解决方案是使用会话创建的加密密钥(使用 Java 的 KeyGenerator 类)并加密发送到客户端的出站 URL。所以现在,网址看起来像:
https://www.example.com/agent/?producerId=<ciphertext>
现在,如果有人尝试 agentId=22222,服务器将解密它认为是密文的内容,并最终创建一个无效的字符序列。
(这留下了可以找到现有 agentId 的可能性,但不太可能与执行攻击的人相关。
我要强调的是,这个问题不是关于最佳安全性(这将是基于角色的检查以确保资源访问)以及试图在灰色区域中挤压一些安全性。
我们的一位安全人员向我推荐了这里的参数加密解决方案。我得到了一个我没有考虑过这个解决方案的外卖 - 损坏的网址 - 并且将使用它以及这个解决方案产生的维护问题来争取时间以一种更少的权宜之计方式强制执行访问规则。