Вопрос

Если у меня есть пользователь ввода данных в богатый текстовый редактор (Tiny Editor) и отправляя данные, которые я храним в базе данных, а затем извлеките, чтобы показать на других динамических веб-страницах, почему мне нужно кодировать здесь.

Единственная причина, потому что кто-то может вставить JavaScript в богатый текстовый редактор? Есть ли другая причина?

Это было полезно?

Решение

Безопасность - это причина.

Самая очевидная / общая причина Перекрестные сценарии (XSS). Оказывается, является основной причиной проблем безопасности, которые вы можете засвидетельствовать на вашем сайте.

Сценарии по перекрестному сайту (XSS) - это тип уязвимости компьютерной безопасности, обычно встречающейся в веб-приложениях, которые позволяют злонамеренным злоумышленникам вводить сценарий на стороне клиента на веб-страницы, просматриваемые другими пользователями. Уязвимость эксплуатационного кросс-сайта может использоваться злоумышленниками для обхода контроля доступа, таких как та же политика происхождения. Сценарии по перекрестному сайту, проведенные на веб-сайтах, было примерно 80% всех уязвимостей безопасности, задокументированных Symantec по состоянию на 2007 год.1 Их влияние может варьироваться от мелкой неприятности до значительного риска безопасности, в зависимости от чувствительности данных, обрабатываемых уязвимым участком, и характер любых смягчеств безопасности, реализованных владельцем сайта.

Дополнительно, как показано ниже комментариев, макет вашего сайта также может быть прикручен.

Тебе нужно Библиотека сценарии Microsoft Anti-Cross

Больше ресурсов

http://forums.ass.asp.net/t/1223756.aspx.

Другие советы

Вы делаете некоторые ошибки.

Если вы принимаете HTML-отформатированный текст из редактора Rich-Text, вы не можем вызов Html.Encode, или он будет кодировать все теги HTML, и вы увидите RAW Markup вместо отформатированного текста.

Однако вам все еще нужно защищать от XSS.

Другими словами, если пользователь вводит следующий HTML:

<b>Hello!</b>
<script>alert('XSS!');</script>

Вы хотите сохранить <b> тег, но падение (не кодировать) <script> ярлык.
Аналогичным образом, вам нужно отбросить атрибуты INLINE событий (например, onmouseover) и JavaScript URL (как <a href="javascript:alert('XSS!');>Dancing Bunnies!</a>)

Вы должны запускать HTML пользователя через строгий анализатор XML и поддерживать строгий белый список тегов и атрибутов при сохранении содержимого.

Я думаю, что вы запутаете «кодировку» с «очисткой».

Если вы хотите принять текст от пользователя, вам нужно кодировать Это как HTML, прежде чем вы видите его как HTML. Таким образом, текст

a < b

HTML-кодируется как

a &lt; b

и отображается в браузере HTML (так же, как он ввел его) как:

a < b

Если вы хотите принять HTML От пользователя (который звучит так, как вы делаете в этом случае), он уже в формате HTML, поэтому вы не хотите снова звонить HTML.encode. Тем не менее, вы можете усвотить его, чтобы удалить определенную разметку, которую вы не допускаете (например, блоки сценариев).

Безопасность - главная причина.

Не только пользователь может ввести код JavaScript или какой-либо другой потребности, вам нужно использовать HTML-кодировать, чтобы отобразить определенные символы на странице. Вы не хотите, чтобы ваша страница сломалась, потому что ваша база данных содержится: «Славная страница: ->».

Кроме того, если вы вводите код в базу данных, обязательно «санатизировать» входы в базу данных.

Да, это предотвратить выполнение JavaScript, если кто-то должен был ввести вредоносную строку в богатый текстовый редактор. Тем не менее, простой текст JavaScript это не только беспокойство, например, это XSS:

<IMG SRC=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>

Посмотрите здесь для ряда различных вариантов XSS; http://ha.ckers.org/xss.html.

В сторону ..... MVC2 реализовал новые функции, чтобы вам больше не нужно звонить HTML.Encode

Если вы измените свой просмотр синтаксиса из

к

MVC автоматически будет кодировать для вас. Это делает вещь намного проще / быстрее. Опять же, MVC2 только

Еще одна причина в том, что какой-то пользователь может ввести несколько закрывающих тегов </div></table> и потенциально сломать макет вашего веб-сайта. Если вы используете инструмент редактирования HTML, убедитесь, что производимый HTML действителен, прежде чем встроить его на страницу без кодирования. Некоторые наборы на боковом сервере требуются для этого. Вы можете использовать HTMLAGILYPACK. сделать это.

Основной причиной для того, чтобы сделать то, что ваше предложение - избежать вашего выхода. Поскольку вы принимаете HTML и хотите выводить его, вы не можете это сделать. То, что вам нужно сделать, это отфильтровать вещь, которую пользователь может сделать это небезопасно, или, по крайней мере, не то, что вы хотите.

Для этого позвольте мне предложить Антисамия.

Вы можете демонстрировать это здесь.

У вас есть много рисков наследства, и вы должны рассмотреть это очень тщательно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top