应用程序委派用户时的安全URL参数(概念)

时间:2016-09-13 16:49:18

标签: security http public-key-encryption url-parameters

上下文

我们有一个应用程序A,可以指导我们的客户顾问完成基于工作流程的流程。此过程的一部分已外包给自己的Web应用程序 - 我们称之为应用程序B

Wenn调用应用程序B当前用户的证书用于HTTP连接(因为它只是将HTTP GET委托给新的浏览器窗口) 。

应用程序A具有自动化用户以执行某些操作所需的数据,而应用程序B希望在调用URL后执行自动操作。

应用程序A还必须提供某些数据(例如ID),以使应用程序B能够知道正在处理的客户。

要求

该应用程序B可以期望已完成自动化,必须确保只有应用程序A是呼叫的来源且用户未更改{{1}的参数(他可以将其作为用于URL连接的证书)。

我们做了什么

我们考虑在参数上构建哈希值,使用应用程序HTTPS的私钥对其进行加密,并将其作为附加参数提交给任何请求。应用程序A使用应用程序B的公钥来解密散列,在接收的参数上构建散列并检查参数是否未更改。

我的问题

确保调用源是应用程序A以及用户未更改参数的其他可能性是什么?

(如果不清楚,请发表评论我目前正在绘制一些grafics并且可能会使问题工作过度)。

此致 JBA

1 个答案:

答案 0 :(得分:1)

所以A标志着B的参数,这是朝着正确方向迈出的一步。

还有一些事情需要考虑:

  • 重播攻击。 B的恶意用户可能会观察到由A签名的所需参数集。他可以在将来的任何时间重播这些参数以及来自A的有效签名,即使A不打算再使用这些参数调用B(比如授权)信息改变了)。为了缓解这种情况,还应在请求中签署一个随机数或时间戳,并在验证签名时由B检查(应检查nonce的唯一性,时间戳不要太旧)。

  • 参与者(他们的消息是谁)。当A签署消息时,签名的数据应包含预期的收件人,以便攻击者无法从A到C接收消息,并将其发送给B.当然,如果所有组件都有一个实例,那么“这不是一个问题,但仍然应该包括类似于B&#url的消息,B应该检查签名的URL实际上是正确的。同样,A应该包括它由A签署的信息(例如他自己的URL或IP地址),B应该验证明显和签名的发件人是否相同。

  • 未创建签名oracle。您应该确保用户不能使用A作为签名oracle来签名。 A的用户可以选择A签署的数据越少越好。

顺便说一句(除了所有这些之外),如果B可以通过某种API请求查询A以获取所需的所有信息,那么它会不会更简单?这样你就不必费心去处理所有相对复杂的加密内容,也不必通过用户传递敏感信息。