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/