1

我们目前有一个 J2EE 系统实现了 OWASP 前 10 项安全措施中的大部分,该应用程序目前允许用户使用存储在数据库中的用户/密码组合登录。

我有一个映射到的 java 过滤器/*来检查会话和会话属性的存在以确定用户的登录状态。

好的,最后问题来了:我们正在与一家制造设备的公司集成,当某个事件发生时通过 GPRS 发送 URL 请求,这个 URL 是我们系统的链接。

我会(在不影响安全性的情况下)想验证这个“设备”,不可能向设备发送任何信息,因此需要验证单个请求,没有人应该能够“重播”该 URL

如果没有某种相互身份验证,我不知道这是否可能。我考虑过要检查的 IP 地址白名单,但网络不断更改 IP,设备仍然“身份不明”。请建议任何想法?

PS:我的临时解决方案是在我的过滤器中添加一个例外,但这不是长期的并且完全不安全。(SSL 也不是一个选项)

4

2 回答 2

4

您可以让设备使用私钥签署请求(包括唯一的请求标识符)。然后,服务器可以检查签名是否有效,并且只有在有效时才接受/应答请求。

请求 ID 可用于确保不重播此类请求。为请求 ID 使用一个简单的计数器意味着很容易检查给定的标识符是否已被使用(即是否正在重放请求)。

于 2011-08-10T14:37:51.313 回答
1

主要问题是,如果第三方获得设备,设备包含的任何身份验证信息都可以提供给第三方。

所以主要的问题是(a)你到底想要验证什么(它应该是设备本身还是它的所有者或设备的位置或......)和(b)设备可以支持哪些功能——它是什么类型的设备以及它在运营方面可以做什么。

如果设备可以嵌入智能卡或加密令牌,这些智能卡或加密令牌旨在保存私钥并抵消提取尝试,那么数字签名将非常有效。

如果设备可以具有受保护的内存但不能执行加密操作(并且不能嵌入智能卡),那么我可以想到预先计算的一次性密码列表,每个设备都是唯一的。服务器将拥有全局列表的副本,并在使用列表后从列表中删除密码。

于 2011-08-10T18:25:04.597 回答