Grails: шифровать параметры запроса, использовать хеширование для шифрования / дешифрования параметров в URL-адресах и скрытых полях.

Я работаю над приложением Grails. При получении запроса (например, показать одну сущность) идентификатор этой сущности будет отображаться в URL-адресе в браузере. В целях безопасности я пытаюсь зашифровать идентификатор в URL-адресе. Любая идея, как я могу хэшировать идентификатор / или любые параметры в Grails.

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

Мне интересно, если что-то уже построено, что позволило бы шифровать / дешифровать параметры запроса в Grails.

Также возможно, если мы сможем применить механизм шифрования / дешифрования в файле URLMapping, любая идея?

заранее спасибо

1 ответ

Решение

Нет необходимости создавать собственные методы шифрования / дешифрования. Могу я спросить, почему вы пытаетесь его зашифровать? Это потому, что у вас есть этот сценарий?

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

И поэтому причина вашего шифрования будет заключаться в том, чтобы помешать другим просматривать другие запросы, если есть другие альтернативы шифрованию. В качестве примера я работаю над чем-то похожим, но вместо всех затрат на шифрование я сделал это так, что если указан идентификатор, он также должен предоставить имя пользователя для этого идентификатора.

http://url/controller/id1?username=username
http://url/controller/id1?username=username2

Когда я получаю идентификатор, я также проверяю, есть ли параметры имени пользователя и совпадает ли имя пользователя с идентификатором имя пользователя - это останавливает других от необходимости троллить по ссылкам.

Если вы все еще хотите зашифровать, дайте мне знать, и я могу дать некоторые дополнительные рекомендации

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 вспомогательный класс, если выше Grails 2.4 и работа сделана

Отказ от шифрования md5 и использование надлежащего внутреннего шифрования / дешифрования с ключом, который вы можете изменить, сделав его недоступным для конечного пользователя, см. По https://github.com/vahidhedayati/md5id/

Другие вопросы по тегам