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



我的老板想让我修改一个Java web应用程序,通过在位置栏中输入url来有效地禁用在Java web应用程序中导航的能力。

我想出了几个策略来实现这个目标。

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

我知道想玩游戏的人可以保存页面并从生成的静态文件提交post表单。

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

我错过了什么吗?

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

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

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

最新更新