почему я должен сделать html.encode ()

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

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

5
задан leora 26 May 2010 в 16:43
поделиться

9 ответов

Причина в безопасности.

Наиболее очевидная / распространенная причина - Межсайтовый скриптинг (XSS). Оказывается, это основная причина проблем с безопасностью, которые могут возникнуть на вашем сайте.

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

Кроме того, как показано в комментариях ниже, макет вашего сайта также может быть испорчен.

Вам понадобится Библиотека анти-кросс-скриптов Microsoft

Дополнительные ресурсы

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

16
ответ дан 18 December 2019 в 05:54
поделиться

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

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

a < b

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

a &lt; b

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

a < b

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

3
ответ дан 18 December 2019 в 05:54
поделиться

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

Для этого позвольте предложить AntiSamy .

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

То, что вы делаете, сопряжено с множеством наследственных рисков, и вы должны очень внимательно относиться к этому.

0
ответ дан 18 December 2019 в 05:54
поделиться

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

Если вы принимаете HTML-форматированный текст из rich-text редактора, вы не можете вызвать Html.Encode, иначе он закодирует все теги HTML, и вы увидите сырую разметку вместо форматированного текста.

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

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

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

Вы хотите сохранить тег , но убрать (не кодировать) тег