Grails - лучший способ избежать XSS во flash.message? - PullRequest
3 голосов
/ 19 марта 2011

Таким образом, стандартные контроллеры, сгенерированные для вас в Grails, вернут пользователю сообщение, сообщающее ему, что что-то было успешно вставлено / отредактировано. По умолчанию возвращаемый идентификатор вставленной вещи, domainClassInstance.id в конце следующей строки

flash.message = "${message(
    code: 'default.updated.message', 
    args: [
      message(code: 'domainclass.label', default: ''), 
      domainClassInstance.id
    ])}"

Очевидное улучшение, которое можно внести в ваше реальное приложение, - изменить это для заголовка / имени рассматриваемого объекта, то есть:

flash.message = "${message(
     code: 'default.updated.message', 
     args: [
       message(code: 'domainClass.label', default: ''), 
       domainClassInstance.name
     ])}"

Это, однако, представляет уязвимость XSS, поскольку поле «имя» выводится непосредственно в виде сообщения. Есть ли ловкий надежный способ рекомендовать людям создавать свои сообщения, чтобы избежать этого, или мне нужно, чтобы люди всегда отмечали .encodeAsHTML () на параметре name? что мне кажется немного склонным к замешательству.

Спасибо, Robin

1 Ответ

3 голосов
/ 21 марта 2011
  • Добавить encodeAs="HTML" атрибут к параметрам сообщения.
  • Кстати, вы можете использовать flash.args и flash.default.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...