Преобразование HTML тегов в текст на C#: экранирование

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Необходимо преобразовать специальные символы в тексте, чтобы он стал безопасным для HTML. Символ < заменяется на &lt;, > — на &gt;, & — на &amp;, " — на &quot;, и ' — на &#39;. Ниже представлен пример реализации на JavaScript:

JS
Скопировать код
function escapeHTML(text) {
  return text.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;')
             .replace(/"/g, '&quot;').replace(/'/g, '&#39;');
}

const safeText = escapeHTML('Special chars: <, >, &, \", \'');

// Миссия выполнена! Специальных символов больше нет.

Для защиты от интерпретации HTML достаточно применить функцию escapeHTML().

Кинга Идем в IT: пошаговый план для смены профессии

Экранирование HTML в C# : выбор инструмента

В мире C# существуют различные методы для экранирования HTML-текста. Рассмотрим самые популярные из них:

Надёжный System.Web.HttpUtility.HtmlEncode

Метод HttpUtility.HtmlEncode справится с задачей даже вне контекста ASP.NET:

csharp
Скопировать код
using System.Web;

string encodedHtml = HttpUtility.HtmlEncode("Special chars: <, >, &");

// Сила и компактность этой строки впечатляют.

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

Универсальный WebUtility.HtmlEncode

Для приложений .NET 4+ предпочтительнее использовать WebUtility.HtmlEncode. Он демонстрирует, что можно обойтись без System.Web:

csharp
Скопировать код
using System.Net;

string encodedHtml = WebUtility.HtmlEncode("Special chars: <, >, &");

// Благодаря WebUtility процесс идет намного быстрее!

Защитник: AntiXssEncoder.HtmlEncode

Если подключение пользователей создает угрозу XSS, AntiXssEncoder.HtmlEncode становится вашим стволом в мире кибербезопасности:

csharp
Скопировать код
using System.Web.Security.AntiXss;

string encodedHtml = AntiXssEncoder.HtmlEncode("Special chars: <, >, &", useNamedEntities: true);

// XSS больше не представляет угрозы.

Выбор метода экранирования

При выборе метода учтите:

  • Требования к безопасности: Ощущаете ли вы угрозу?
  • Версию .NET: Держите руку на пульсе последних техологических трендов?
  • Ваши отношения с System.Web: Считаете ли вы себя его сторонником?

Подводные камни экранирования

На пути кодирования будьте особенно внимательны к:

  • Символам & (амперсанд) — они-то и есть мастера маскировки.
  • Смешиванию кодированного и некодированного контента — это как мешать масло с водой.
  • Контекстное кодирование: каждая ситуация требует индивидуального подхода.

Визуализация

Отслеживайте, как обычный текст превращается в специальный код:

Markdown
Скопировать код
До: "Hello & Goodbye <script>"  // Вот они, специальные символы: [&, <, >]
После: "Hello &amp; Goodbye &lt;script&gt;" // И вуаля, вмешалась магия

Этот процесс переводит специальные символы в безопасные HTML-сущности, то есть в &amp;, &lt;.

Сценарии экранирования

Контент, создаваемый пользователями

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

Динамический HTML

Если вы занимаетесь динамическим созданием HTML, гарантируйте защиту данных пользователей и внешних источников с помощью экранирования HTML.

Вставка кода в HTML

Демонстрируете фрагменты кода на HTML-страницах? Защитите теги <div> от "затопления" в коде. Используйте HTML-экранирование.

Полезные материалы

  1. Справка по элементам HTML – HTML: HyperText Markup Language | MDN
  2. HTML стандарт
  3. Полное руководство по data атрибутам | CSS-Tricks
  4. HTML сущности символов
  5. Can I use... Поддержка HTML5, CSS3 и других технологий
  6. he – npm
  7. Служба валидации разметки W3C