URL标识符的加密算法

问题描述 投票:0回答:1

我正在使用Spring Web应用程序,并且遇到了一种情况,该情况要求在URI中传递标识符(通过HTTPS进行获取),例如:https://www.targetdomain.com/services?id=123。该URI出现在最终用户浏览器上,我担心的是,任何人都可以篡改该标识符“ 123”,该标识符在我的数据库中作为表之一的主键链接。

解决此问题的一种方法可能是将其保存在用户会话(HTTPSession)中,另一种可能是对其进行加密并将其作为https://www.targetdomain.com/services?id=jk3434jj123jkh23jh213h扔到浏览器中。最终用户单击链接后,我可以在服务器端解密该链接以检索标识符。

我是加密技术的新手,我想知道什么合适的加密算法,在浏览器上打印该标识符之前,应该使用该算法来加密该标识符,以便可以在服务器上检索它

我遇到了一些帖子(例如-encrypt and encode URL parameters spring mvc),其中使用“ AES / CBC / PKCS5Padding”作为密码来显示工作代码。对于这个用例,这看起来是一个好的解决方案吗?

java security encryption obfuscation urlencode
1个回答
0
投票

最安全的解决方案是按照您所描述的在会话中管理参数,如果可以的话。这样,所有内容都在服务器上,并且受到保护,防止攻击者可以访问浏览器中的用户会话(但不能访问服务器)。如果您可以这样做,那可能是对的。

但是,有时您需要通过浏览器。对于发送到浏览器的任何内容,您可能有两个不同的要求:

  1. 您可能希望用户无法读取它,而解决方案就是加密。如果是ID,则可能不那么相关,但是您的ID可能也会以某种方式敏感,只有您能知道。

  2. 您可能希望用户不能修改它们,为此,您需要消息身份验证。

请注意,这是两件分开的事情,加密的消息不一定经过身份验证,并且经过身份验证的消息未加密。

因此,如果您只关心消息身份验证,则可以将身份验证代码作为单独的参数添加,例如,使用生成。 HMAC,然后在返回参数后检查。

或者根据您的要求,您可以选择一种经过身份验证的加密(AEAD),它可以同时提供两种功能。这样的算法是例如。 AES在GCM模式下。

请注意,您还必须考虑重播攻击。如果仅对参数本身进行身份验证或加密,则用户可以在其他会话中观察此类加密的参数,例如,并在自己的会话中重播这些参数。一种对此的标准解决方案是还包括时间戳记,以使此类安全参数也具有时间限制。

或者您仍然可以在整个会话中完成它...:)

© www.soinside.com 2019 - 2024. All rights reserved.