Как я могу очистить пользовательский ввод, но сохранить содержимое тегов <pre>? - PullRequest
1 голос
/ 13 ноября 2010

Я использую CKEditor в формате Markdown для отправки созданного пользователем контента. Я хотел бы очистить этот контент от вредоносных тегов, но я хотел бы сохранить форматирование, которое является результатом анализатора уценки. Я использовал два метода, которые не работают.

Метод первый

<!--- Sanitize post content --->
<cfset this.text = HTMLEditFormat(this.text)>
<!--- Apply mark down parser --->
<cfx_markdown textIn="#this.text#" variable="parsedNewBody">

Проблема По какой-то причине <pre> и <blockquote> экранированы, и поэтому я не могу их использовать. Появляются только специальные символы. Другие теги уценки работают хорошо, такие как жирный шрифт, курсив и т. Д. Может ли быть так, что CKEdit неправильно применяет уценку к <pre> и <blockquote>?

Пример: если бы я набрал <script>alert("!");</script>, я бы получил следующее: &lt;script&gt;alert(&quot;!&quot;);&lt;/script&gt;

Метод второй

То же, что и в первом методе, но в обратном порядке, в котором выполняется очистка после того, как анализатор уценки выполнил свою работу. Это фактически бесполезно, так как функция очистки удаляет все теги, вредоносные или созданные тегами анализатором уценки.

Хотя я хочу дезинфицировать вредоносный контент, я хочу сохранить основные теги HTML и содержимое тегов <pre> и <blockquote>! - есть идеи, как?

Спасибо!

Ответы [ 3 ]

4 голосов
/ 13 ноября 2010

Есть две важные санации, которые необходимо выполнить для пользовательского контента.Во-первых, вы хотите защитить вашу базу данных от внедрения SQL.Вы можете сделать это с помощью хранимых процедур или тега <cfqueryparam>, не изменяя данные.

Еще одна вещь, которую вы хотите сделать, это защитить ваш сайт от XSS и других атак, основанных на отображении контента.Это можно сделать путем очистки содержимого на дисплее .Технически было бы неплохо сделать это перед сохранением, но, как правило, рекомендуется хранить максимально точные данные и изменять их только для отображения.В любом случае, я думаю, что ваша проблема в том, что вы делаете эту дезинфекцию не по порядку.Сначала вы должны запустить средство форматирования Markdown для контента, THEN запустить его через HTMLEditFormat().

Также важно отметить, что HTMLEditFormat не защитит вас от всех атак, но это хорошоНачните.Вы захотите изучить реализацию утилит OWASP , что не сложно в ColdFusion, поскольку вы можете напрямую использовать предоставленную реализацию Java.

0 голосов
/ 13 ноября 2010

Может быть HTMLEditFormat twin HTMLCodeFormat это то, что вам нужно?

0 голосов
/ 13 ноября 2010

Почему бы вам просто не добавить и не добавить пред тег после разбора?

Я имею в виду, если вы заботитесь только о первом до, и у вас нет вложенных пре или аналогичных. Если ваш тег cfx очищает pre, создайте новый метод-обертку, который проверит, существует ли

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