1

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

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

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

如果我们可以在 URLMapping 文件中应用加密/解密机制,是否有可能,知道吗?

提前致谢

4

1 回答 1

0

基本上不需要您制作自己的加密/解密方法。我能问一下你为什么要加密它吗?是因为你有这种情况吗?

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
   }

}

如果高于 grails 2.4 并完成工作,则 CompileStatic 助手类

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

于 2017-04-20T10:50:12.927 回答