Grails:加密查询参数,使用散列 encrypt/decrypt url 中的参数和隐藏字段

Grails: encrypt query params, use hashing to encrypt/decrypt the params in url and hidden fields

我正在开发 Grails 应用程序。何时获取请求(例如显示一个实体)该实体的 ID 将显示在浏览器的 url 中 出于安全问题,我正在尝试对 url 中的 id 进行加密。知道如何散列 grails 中的 id/or 任何参数。

http //url/controller/action/3
http //url/controller/action/08eab7690d2a6ee69

我想知道是否已经构建了允许 encrypt/decrypt grails 中的查询参数的东西。

另外,如果我们可以在 URLMapping 文件中应用 encryption/decryption 机制,有什么想法吗?

提前致谢

基本上不需要你自己制作encryption/decryption方法。我能问一下你为什么要加密它吗?是因为你有这个场景吗?

http://url/controller/id1
http://url/controller/id2

因此,您加密的原因是阻止其他人浏览其他请求(如果有其他加密替代方法)。作为一个例子,我正在做类似的事情,但我没有做所有的加密开销,所以如果提供了 id,它还必须提供该 id

的用户名
http://url/controller/id1?username=username
http://url/controller/id1?username=username2

当我获得 ID 时,我还会检查是否有用户名参数以及用户名是否与 id 用户名匹配 - 这会阻止其他人通过链接进行攻击

如果您仍然希望加密,请告诉我,我可以提供更多指导

def MyController {
  def index() {
     if (params.id) {
        params.id=Md5Helper.translate(params.id)
     }
  }
}

src/groovy/main/{package}/Md5Helper.groovy

class Md5Helper.groovy {

   //return deconverted string into Long value
   public static Long translate(String input) {
     //do your md5 decryption here
      if (result.isNumber()) {
         return result as Long
      }
      return 0L
   }

   //override so when default Long is sent just return it
   public static Long translate(Long input) {
      return input
   }

}

CompileStatic 助手 class 如果高于 grails 2.4 并且工作完成

放弃 md5 加密并使用适当的内部加密/解密和您可以更改的密钥,使其无法被最终用户加密,请参阅 https://github.com/vahidhedayati/md5id/