2013-02-28 6 views
2

В моих Грааль приложения я извлечение текста из params и использования, что в качестве параметров в моих доменных запросах:Как защититься от XSS атак в приложении Grails

Например:

def color = Colors.findByName(params.colorname) 

Я представить себе кого-то мог бы играть с параметром params.colorname для запуска плохих запросов по моей базе данных mysql.

Каковы некоторые из лучших практик для защиты от таких вещей?

+1

Я считаю, что вы думаете о [SQL injection] (http://en.wikipedia.org/wiki/Sql_injection), а не [XSS] (http://en.wikipedia.org/wiki/Cross-site_scripting) ? – hsan

+0

Плагин очистки Html может помочь предотвратить дезинфекцию пользователя. Http://nimavat.me/blog/sanitize-user-input-with-html-cleaner-plugin –

ответ

5

Когда вы визуализируете поле в своем представлении, которое потенциально может содержать атаку XSS, вам необходимо закодировать его как HTML. Вы должны сделать все поля, содержащие ввод пользователя, закодированы. Все стандартные теги Grails кодируются как HTML. Если вы используете ${}, вы можете столкнуться с проблемой. Вам нужно либо вручную закодировать его, как ${colorname.encodeAsHTML()}, либо использовать тег типа fieldValue, если это свойство bean.

Вы также можете установить глобальный кодек по умолчанию с grails.views.default.codec = "html" в Config.groovy.

Следите за двойным кодированием и убедитесь, что вы кодируете как HTML в свои собственные теги.

Вы также ссылаетесь на атаки SQL-инъекций, которые отличаются от атак XSS. Вы рискуете только инъекцией SQL, если вы пишете собственный SQL или HQL и напрямую интерполируете ввод пользователя в SQL/HQL. Это означает, что Colors.executeQuery("from Colors where name like ?", params.colorname) вместо Colors.executeQuery("from Colors where name like $params.colorname").

+2

«Все стандартные теги Grails кодируются как HTML». Это неверно до появления новых версий 2.2.2 и 2.1.5. 'g.message' не кодировался. Это было [разрешено в новых версиях] (http://jira.grails.org/browse/GRAILS-7170). – Weezle

+1

Двойное кодирование является менее проблемой по Grails 2.3. Я могу порекомендовать ссылку источника для тех, кто интересуется этим вопросом. Источник: http://grails.github.io/grails-doc/2.4.5/guide/security.html – crashh

Смежные вопросы