2013-12-19 4 views
1

Согласно Марк ПалмерGrails ресурсы Plugin кодирования проблема с кодом = HTML

Preventing XSS attacks

В двух словах, чтобы защитить приложение от инъекций кода XSS использует вы должны:

Установите default grails.views.default.codec в config на «HTML»

OK. Так что, если у меня есть это ниже моего Config.groovy

grails.views.default.codec = "none" 

И в мой контроллер, я добавляю:

def afterInterceptor = { model -> 
    model.headerJs = "alert('bingo for '+[$params.unitId]);" 
} 

И в моем GSP:

<r:script disposition="head">${headerJs}</r:script> 

Он работает. Я вижу ожидаемое предупреждение javascript, когда я делаю View Source, и получаю предупреждение, когда страница служит.

Но, если в Config.groovy я применяю рекомендуемое изменение:

grails.views.default.codec = "html" 

Мой GSP оказывает

<script type="text/javascript">alert(&#39;halooba for &#39;+[1]);</script> 

, который я вижу, это очень безопасно.

Моя цель с этим приложением - иметь пользовательские JS-фрагменты, различные свойства и другие значения, сохраненные для клиента в Домене. Эти значения будут введены нашими админами (а не клиентом). На основании того, кто вызывает страницу с запросом HTTP, например, www.mydomain.com/ThisApp/?customerId=13423 (но закодированный клиентId), я бы звонил в Службы моего контроллера, чтобы получить связанные настройки для клиента из Домен и ввести их в ВСП.

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

Таким образом, чтобы следовать этому методу безопасности, я либо должен иметь возможность его unencode, либо мне нужно определить другой метод включения javascript в GSP, который не кодирует его.

Любые предложения?

СПАСИБО!

+0

вопрос должен быть изменен с кодом = HTML для кодека = HTML – Twelve24

ответ

0

Вы можете предложить Grails не избежать с помощью raw() доступны в GSP как:

<r:script disposition="head">${raw(headerJs)}</r:script> 
+0

Хорошо. Но мой проект работает 2.2.4. Я пытаюсь обновить его до версии 2.3.4, но при этом не удается разрешить ошибки зависимостей с org.grails.plugins: tomecat: 2.3.4 и org.grails.plugins: hibernate: 2.3.4. Есть ли метод типа raw() до 2.3? – Twelve24

+0

Вы пробовали использовать 'decodeHTML()'? – dmahapatro

+0

Это не работает: ' $ {headerJs.decodeHTML()}' – Twelve24

0

Для Grails 2.2.x и ниже, вы можете поместить рекомендуемую кодировку в вашем Config.groovy:

grails.views.default.codec = "html" 

и использовать TagLib принести в ценности, которые являются безопасными и не должны быть HTML закодированы:

<r:script><com_myapp:getJSDeferred unitId="${params.unitId}" /></r:script> 

, и он будет обработан.

0

FYI: Выше решение не позволяет вывести JSON-выход для переменной javascript. Мой обходной путь, скажем, у вас есть model.data определяется как HashMap:

var someVar= ${raw(data as JSON).toString())}; 
Смежные вопросы