Java:嵌入在网页上的加密UID是否有效?

时间:2013-05-29 21:11:06

标签: java encryption uniqueidentifier

我的老板希望我调整Java webapp,通过在位置栏中键入URL来有效禁用在Java webapp中导航的功能。

我已经提出了一些策略来实现这一目标。

我想到的一件事是生成一个唯一的ID号,并在隐藏的表单字段中将其打印在JSP上,以通过HTTP POST请求发送回服务器。

我知道有人想玩游戏只能保存页面并从生成的静态文件中提交帖子表单。

我正在考虑加密身份证号码,但我想知道是否有意愿这样做?它将被解密服务器端,就像用户单击导航按钮或者黑客用户查看源并使用脚本/静态HTML页面将ID号发送回服务器一样。

我错过了什么吗?

1 个答案:

答案 0 :(得分:0)

这完全取决于所使用的策略,但UID的加密本身并不是一个好的解决方案。具有任何依赖于加密的安全性的最重要部分是协议和密钥管理。基本上,如果您不能相信其中一个,那么您的应用程序就不安全了。如果加密的UID只被视为静态变量,那么任何人都可以简单地复制加密的UID(正如您在问题中所记录的那样)。

您可以做的是使用存储在cookie和服务器中的UID。使用它来创建密钥(使用密钥派生函数)。现在,如果有请求,请确保请求包含唯一编号(例如会话ID +计数器)。现在,您可以使用先前计算的密钥创建消息验证代码,base64对其进行编码并将其与请求一起发送。然后在服务器端验证这个MAC(使用密钥,数据,当然还有MAC数据)。

即使这种方案当然也无法阻止黑客。为此,您至少需要使用TLS连接以确保在传输过程中无法读取UID(用于生成密钥)。基本上,如果没有TLS,您无法创建足够安全的解决方案来阻止针对性的中间人攻击。