我的老板想让我改编一个Java webapp,通过在地址栏中输入URL来有效地禁用Java webapp中的导航功能。
我已经想出了几个策略来实现这一点。
我正在考虑的一件事是生成一个惟一的ID号,并将其打印在JSP上的一个隐藏表单字段中,然后通过HTTP POST请求发送回服务器。
我知道有些想玩游戏的人只需保存页面并提交静态文件中的post表单即可。
我在考虑加密ID号,但我想知道这样做是否有意义?它将在服务器端解密,就像用户单击导航按钮或黑客用户查看源代码并使用脚本/静态HTML页面将ID号发送回服务器一样。
我是不是遗漏了什么?
发布于 2013-05-30 05:42:11
这完全取决于所使用的策略,但是加密UID本身并不是一个好的解决方案。对于任何一种依赖于加密的安全性,最重要的部分是协议和密钥管理。基本上,如果你不能信任这两者中的一个,那么你的应用程序就不安全。如果加密的UID仅仅被看作是一个静态变量,那么任何人都可以简单地复制加密的UID (正如您在问题中所想的那样)。
您可以做的是使用存储在cookie和服务器上的UID。使用它来创建密钥(使用密钥派生函数)。现在,如果有请求,请确保该请求包含唯一的编号(例如,会话ID +计数器)。现在,您可以使用之前计算出的密钥创建一个消息验证码,base64对其进行编码,并将其与请求一起发送。然后在服务器端验证MAC (使用密钥、数据,当然还有MAC数据)。
当然,即使是这个计划也不能威慑黑客。为此,您至少需要使用TLS连接来确保UID (用于生成密钥)在传输过程中不会被读取。基本上,如果没有TLS,您就无法创建一个足够安全的解决方案来阻止有针对性的中间人攻击。
https://stackoverflow.com/questions/16823856
复制相似问题