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

Java:网页上嵌入的加密UID是否有效?,java,encryption,uniqueidentifier,Java,Encryption,Uniqueidentifier,我的老板希望我通过在位置栏中键入URL,使Java webapp能够有效地禁用在Java webapp中导航的功能 我想出了一些策略来实现这一点 我想到的一件事是生成一个唯一的ID号,并将其打印在JSP上的一个隐藏表单字段中,以便通过HTTP POST请求发送回服务器 我知道想要玩游戏的人可以保存页面,然后从生成的静态文件中提交post表单 我在考虑加密身份证号码,但我想知道这样做是否有意义?它将在服务器端解密,就像用户单击导航按钮或黑客用户查看源代码并使用脚本/静态HTML页面将ID号发送回服

我的老板希望我通过在位置栏中键入URL,使Java webapp能够有效地禁用在Java webapp中导航的功能

我想出了一些策略来实现这一点

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

我知道想要玩游戏的人可以保存页面,然后从生成的静态文件中提交post表单

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


我遗漏了什么吗?

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

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


当然,即使是这个计划也无法阻止黑客。为此,您至少需要使用TLS连接,以确保在传输期间无法读取UID(用于生成密钥)。基本上,没有TLS,您无法创建一个足够安全的解决方案来阻止目标中间人攻击。

这样做的首要目的是什么?您想拥有一个行为与web应用不同的web应用程序?其目的是强制用户仅使用按钮和链接在网站内导航。