OWASP Java HTML Sanitizer Project

отал сColdfusion 9 в последнее время (прежде всего фон PHP), и я ломаю голову, пытаясь понять, как «очистить / дезинфицировать» введенную пользователем строку / строку.

Я хочу сделать это HTMLSAFE, исключить любой JavaScript или внедрение SQL-запроса, как обычно. Я надеюсь, что пропустил какую-то функцию, которая уже поставляется с CF9.

Может ли кто-нибудь указать мне правильное направление?

Ответы на вопрос(4)

Решение Вопроса

а не альтернативный ответ, но панель комментариев - это немного мусора для ссылок.

Посмотрите на ColdFusionстроковые функции, У вас есть HTMLCodeFormat, HTMLEditFormat, JSStringFormat и URLEncodedFormat. Все это может помочь вам в работе с контентом, размещенным в форме.

Вы также можете попробовать использовать функции регулярных выражений для удаления тегов HTML, но это никогда не точная наука. ЭтотColdFusion на основе регулярных выражений / HTML-вопрос должно немного помочь

Вы также можете попытаться защитить себя от ботов и известных спамеров, используя что-то вродеcfformprotect, который объединяетПроект Honeypot а такжеAkismet защита среди других инструментов в ваших формах.

 Kyle Humfeld10 янв. 2011 г., 22:16
Все прекрасные идеи!
 Stephen Moretti11 янв. 2011 г., 16:41
Следует отметить, что ответ Orangepips также действителен, он просто не был опубликован, когда я начал свой пост. AntiSamy - это то, что мы также использовали для санации ввода данных.
 Kyle Humfeld10 янв. 2011 г., 23:19
Совершенно справедливо, рад, что смог хоть немного помочь. знак равно
 Jakub10 янв. 2011 г., 22:19
хороший ответ, я должен принять это, хотя Кайл был первым, я чувствую, что вы добавили намного больше ответа. Спасибо, информативно :)

Настройка администратора «Глобальная защита скриптов», который применяет регулярное выражение к переменным post и get (т.е. FORM и URL) для удаления<script/>, <img/> и несколько других теговиспользованиедействует() для проверки типов данных переменных (см мой подробный ответ на этот).<cfqueryparam/>, который служит для создания параметров связывания SQLа также проверить тип данных, переданный ему.

Это отметил, если выдействительно пытаясь дезинфицировать HTML, используйте Java, к которому ColdFusion может иметь естественный доступ. В частности используйтеOWASP AntiSamy Project, который берет фрагмент HTML ибелые списки какие ценности могут быть частью этого. Это тот же подход, который используют такие сайты, как SO и slashdot.org, для защиты представлений, и это более безопасный подход для приема содержимого разметки.

сит от того, что вы хотите сделать со строкой. большинство смягчений для

сохранение контента в базе данных (например,<cfqueryparam ...>)использование контента для отображения на следующей странице (например, поместите url-параметр в ссылку или покажите url-параметр в тексте)сохранение файлов и использование загружаемых имен файлов и контента

Всегда есть риск, если вы будете следовать идее предотвращения и уменьшения строки, разрешая в основном все на первом этапе, а затем дезинфицировать вредоносный код «прочь», удаляя или заменяя символы (подход черного списка). Лучшее решение - заменить строкиrereplace(...) повторяет регулярные выражения, которые явно разрешают только символы, необходимые для сценария, который вы используете, в качестве простого решения, когда это возможно. варианты использования - это ввод чисел, списков, адресов электронной почты, URL-адресов, имен, почтовых индексов, городов и т. д.

Например, если вы хотите запросить адрес электронной почты, вы можете использовать

<cfif reFindNoCase("^[A-Z0-9._%+-][email protected][A-Z0-9.-]+\.(?:[A-Z]{5})$", stringtosanitize)>...ok, clean...<cfelse>...not ok...</cfif>

(или собственное регулярное выражение). Для HTML-Imput или CSS-Imput я бы также рекомендовалOWASP Java HTML Sanitizer Project.

CFQUERYPARAM.

Что касается очистки входных данных для XSS и т.п., вы можете использоватьАтрибут ScriptProtect в CFAPPLICATIONХотя я слышал, что это не работает безупречно. Вы могли бы посмотреть наопускная решетка или аналогичные сторонние CFC для лучшей защиты сценариев, если вы предпочитаете.

Ваш ответ на вопрос