Разрешение Javascript и CSS, но не XSS

Мы позволяем пользователям создавать богатый контент с помощью TinyMCE, включая Javascript и CSS. Однако, когда контент достигает сервера (Java), мы хотим отфильтровать весь код XSS или потенциально вредоносный код, такие как document.cookie, eval и т. Д., Независимо от того, находятся ли они в CSS, встроенном JS, XSS Javascript, созданном с использованием текстовой строки ( например, document.write) и т. д. Все остальное, например. изменение цвета при наведении указателя мыши, установка градиента на CSS и т. д. в порядке.

Мы хотим предоставить нашим пользователям гибкость, но в то же время хотим обеспечить безопасность пользователей. Мы исследовали такие библиотеки, как HTML Purifier, jSoup, но они не кажутся достаточно умными, чтобы отличить потенциально вредоносный JS от безопасного. Нам интересно, есть ли способ сделать это?

Спасибо.


person cix.yong    schedule 02.01.2014    source источник
comment
Убедитесь, что вам действительно нужен JS для богатого контента. В настоящее время CSS сам по себе может увести вас очень далеко, а отказ от JS удешевит создание всего этого.   -  person Kos    schedule 02.01.2014
comment
такие вещи, как наведение мыши на изображение, отображают увеличенное изображение, т.е. превью, довольно популярна. Я сомневаюсь, что только CSS может это сделать   -  person cix.yong    schedule 02.01.2014
comment
Конечно, может, отправной точкой является codepen.io/anon/pen/ajsyi. Я уверен, что вы можете сделать больше с помощью JS, но запуск ненадежного кода от имени вашего веб-сайта - очень проблематичная альтернатива.   -  person Kos    schedule 02.01.2014
comment
это правда, гибкость для пользователя также важна, но в худшем случае мы просто используем CSS, как вы сказали. Или, что еще хуже, мы разрешаем только HTML. Спасибо   -  person cix.yong    schedule 03.01.2014


Ответы (2)


Вы смотрели Google Caja? Это компилятор для стороннего javascript, поэтому его можно безопасно встроить на другой сайт:

https://developers.google.com/caja/

Похоже на то, что вы ищете.

person NoUsername    schedule 02.01.2014
comment
Пока это лучший ответ, я все еще исследую его, поскольку он требует развертывания кода на стороне сервера, но мне интересно, как это делает Wordpress. Я пробовал погуглить, но пока безуспешно. Если бы вы или кто-нибудь мог сообщить мне об этом, было бы здорово. Спасибо. - person cix.yong; 03.01.2014

Вы можете использовать JSoup для этой работы. В JSoup есть XSS Cleaner Parser, который может работать с объектом whilelist (список разрешенных тегов). Sanitizer белого списка jsoup работает путем синтаксического анализа входящего HTML, а затем итерации по дереву синтаксического анализа, разрешая только известные безопасные теги и атрибуты (и значения ) через очищенный вывод. Он не использует регулярные выражения, которые не подходят для этой задачи. jsoup предоставляет ряд конфигураций белых списков для удовлетворения большинства требований; при необходимости они могут быть изменены. Прочтите эту ссылку для получения дополнительных сведений [http://jsoup.org/cookbook/cleaning-html/whitelist-sanitizer].

person arsingh1212    schedule 02.01.2014
comment
мы на самом деле пробовали безуспешно. Один пример, он удаляет каждый «onclick», когда мы действительно хотим, чтобы он удалял его только тогда, когда onclick выполняет вредоносный код. Другой пример: стиль следует фильтровать ТОЛЬКО, если он содержит вредоносный style = 'background: url (javascript: alert (' XSS '))'. Думаю, мы хотим, чтобы библиотека была достаточно умной, чтобы отличать вредоносную от хорошей. JSoup не имеет такой возможности. - person cix.yong; 02.01.2014
comment
Боюсь, насколько мне известно, такой библиотеки не существует. Возможно, вам придется закодировать правила, чтобы сделать белый и черный список JavaScript. Вы можете создавать статические правила, например, используемые в Zozzle ‹< a href = "https://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=9&cad=rja&ved=0CGcQFjAI&url=. HTTP% 3A% 2F% 2Fresearch.microsoft.com% 2Fpubs% 2F152618% 2Fusenixsec11b.pdf & е = AXrFUpP8NK6XyQPcvIHADA & USG = AFQjCNGZB5kihAhiI0NpsCa2sIJN22_akg & Sig2 = iQErYLe7wYWQc_U19ysDTQ & BVM = bv.58187178, d.bGQ»отн = "NOFOLLOW noreferrer"> google.co.in / ›. - person arsingh1212; 02.01.2014