diff --git a/anbs_cpfn/Classes/Sanitizer.cs b/anbs_cpfn/Classes/Sanitizer.cs
index 3344f61..b1e315d 100644
--- a/anbs_cpfn/Classes/Sanitizer.cs
+++ b/anbs_cpfn/Classes/Sanitizer.cs
@@ -1,207 +1,208 @@
using anbs_cp.ForNet.Enums;
+
using Ganss.Xss;
namespace anbs_cp.ForNet.Classes;
///
-/// Очистка текста от лишних HTML-тегов
+/// Очистка текста от лишних HTML-тегов
///
public static class Sanitizer
{
- #region Свойства
+ #region Свойства
- ///
- /// Все теги запрещены
- ///
- public static SanitizerAllowedHtml AllowedNone => GetNone();
+ ///
+ /// Все теги запрещены
+ ///
+ public static SanitizerAllowedHtml AllowedNone => GetNone();
- ///
- /// Все теги разрешены
- ///
- public static SanitizerAllowedHtml AllowedAll => GetAll();
+ ///
+ /// Все теги разрешены
+ ///
+ public static SanitizerAllowedHtml AllowedAll => GetAll();
- ///
- /// Оставлены только текстовые теги
- ///
- public static SanitizerAllowedHtml AllowedTextOnly => GetTextFormatOnly();
+ ///
+ /// Оставлены только текстовые теги
+ ///
+ public static SanitizerAllowedHtml AllowedTextOnly => GetTextFormatOnly();
- ///
- /// Оставлены только текстовые теги, а также img и a
- ///
- public static SanitizerAllowedHtml AllowedImageAndLinks => GetImageAndLinks();
+ ///
+ /// Оставлены только текстовые теги, а также img и a
+ ///
+ public static SanitizerAllowedHtml AllowedImageAndLinks => GetImageAndLinks();
- ///
- /// Применяются все теги, кроме iframe
- ///
- public static SanitizerAllowedHtml AllowedAllExceptIFrame => GetAllExceptIFrame();
+ ///
+ /// Применяются все теги, кроме iframe
+ ///
+ public static SanitizerAllowedHtml AllowedAllExceptIFrame => GetAllExceptIFrame();
- #endregion
+ #endregion
- #region Методы
+ #region Методы
- ///
- /// Очистка html-кода согласно параметрам
- ///
- /// HTML-код
- /// Параметры очистки
- /// Очищенный html-кода
- private static string SanitizeHtml(string html, SanitizerAllowedHtml allowedHtml)
+ ///
+ /// Очистка html-кода согласно параметрам
+ ///
+ /// HTML-код
+ /// Параметры очистки
+ /// Очищенный html-кода
+ public static string SanitizeHtml (string html, SanitizerAllowedHtml allowedHtml)
+ {
+ // Создаю очиститель
+ HtmlSanitizer sanitizer = new()
{
- // Создаю очиститель
- HtmlSanitizer sanitizer = new()
- {
- // - сохраняю дочерние удалённых
- KeepChildNodes = true
- };
+ // - сохраняю дочерние удалённых
+ KeepChildNodes = true
+ };
- // Выключаю все параметры HTML
- sanitizer.AllowedTags.Clear();
- sanitizer.AllowedSchemes.Clear();
- sanitizer.AllowedCssProperties.Clear();
- sanitizer.AllowedClasses.Clear();
- sanitizer.AllowedAttributes.Clear();
- sanitizer.AllowedAtRules.Clear();
- sanitizer.AllowDataAttributes = false;
+ // Выключаю все параметры HTML
+ sanitizer.AllowedTags.Clear();
+ sanitizer.AllowedSchemes.Clear();
+ sanitizer.AllowedCssProperties.Clear();
+ sanitizer.AllowedClasses.Clear();
+ sanitizer.AllowedAttributes.Clear();
+ sanitizer.AllowedAtRules.Clear();
+ sanitizer.AllowDataAttributes = false;
- // Загружаю параметры
- sanitizer.AllowedTags.UnionWith(allowedHtml.AllowedTags);
- sanitizer.AllowedSchemes.UnionWith(allowedHtml.AllowedSchemes);
- sanitizer.AllowedCssProperties.UnionWith(allowedHtml.AllowedCssProperties);
- sanitizer.AllowedClasses.UnionWith(allowedHtml.AllowedClasses);
- sanitizer.AllowedAttributes.UnionWith(allowedHtml.AllowedAttributes);
- sanitizer.AllowDataAttributes = allowedHtml.AllowDataAttributes;
+ // Загружаю параметры
+ sanitizer.AllowedTags.UnionWith(allowedHtml.AllowedTags);
+ sanitizer.AllowedSchemes.UnionWith(allowedHtml.AllowedSchemes);
+ sanitizer.AllowedCssProperties.UnionWith(allowedHtml.AllowedCssProperties);
+ sanitizer.AllowedClasses.UnionWith(allowedHtml.AllowedClasses);
+ sanitizer.AllowedAttributes.UnionWith(allowedHtml.AllowedAttributes);
+ sanitizer.AllowDataAttributes = allowedHtml.AllowDataAttributes;
- // Очищаю html согласно правилам
- return sanitizer.Sanitize(html);
- }
+ // Очищаю html согласно правилам
+ return sanitizer.Sanitize(html);
+ }
- ///
- /// Очистка html-кода по уровню очистки
- ///
- /// HTML-код
- /// Уровень очистка
- /// Очищенный html-код
- public static string SanitizeHtml(string html, ESanitizerLevel level)
+ ///
+ /// Очистка html-кода по уровню очистки
+ ///
+ /// HTML-код
+ /// Уровень очистка
+ /// Очищенный html-код
+ public static string SanitizeHtml (string html, ESanitizerLevel level)
+ {
+ // Получаю параметры очистки
+ SanitizerAllowedHtml allowedHtml = level switch
{
- // Получаю параметры очистки
- SanitizerAllowedHtml allowedHtml = level switch
- {
- ESanitizerLevel.NoTags => AllowedNone,
- ESanitizerLevel.TextFormatOnly => AllowedTextOnly,
- ESanitizerLevel.ImageAndLinks => AllowedImageAndLinks,
- ESanitizerLevel.AllExceptIFrame => AllowedAllExceptIFrame,
- ESanitizerLevel.All => AllowedAll,
- var _ => AllowedAll
- };
+ ESanitizerLevel.NoTags => AllowedNone,
+ ESanitizerLevel.TextFormatOnly => AllowedTextOnly,
+ ESanitizerLevel.ImageAndLinks => AllowedImageAndLinks,
+ ESanitizerLevel.AllExceptIFrame => AllowedAllExceptIFrame,
+ ESanitizerLevel.All => AllowedAll,
+ var _ => AllowedAll
+ };
- // Очищаю код и возвращаю результат очистки
- return SanitizeHtml(html, allowedHtml);
- }
+ // Очищаю код и возвращаю результат очистки
+ return SanitizeHtml(html, allowedHtml);
+ }
- #endregion
+ #endregion
- #region Вспомогателдьные методы
+ #region Вспомогателдьные методы
- ///
- /// Получаю параметры, удаляющие все теги
- ///
- /// Параметры очистки
- private static SanitizerAllowedHtml GetNone() =>
- new()
- {
- AllowedTags = [],
- AllowedAttributes = [],
- AllowedCssProperties = [],
- AllowedClasses = [],
- AllowedSchemes = [],
- AllowDataAttributes = false
- };
-
- ///
- /// Получаю параметры по умолчанию (разрешающие все теги)
- ///
- /// Параметры очистки
- private static SanitizerAllowedHtml GetAll()
+ ///
+ /// Получаю параметры, удаляющие все теги
+ ///
+ /// Параметры очистки
+ private static SanitizerAllowedHtml GetNone () =>
+ new()
{
- // Создаю очиститель
- HtmlSanitizer sanitizer = new();
+ AllowedTags = [],
+ AllowedAttributes = [],
+ AllowedCssProperties = [],
+ AllowedClasses = [],
+ AllowedSchemes = [],
+ AllowDataAttributes = false
+ };
- // Создаю модель
- return new()
- {
- AllowedTags = sanitizer.AllowedTags.ToList(),
- AllowedAttributes = sanitizer.AllowedAttributes.ToList(),
- AllowedCssProperties = sanitizer.AllowedCssProperties.ToList(),
- AllowedClasses = sanitizer.AllowedClasses.ToList(),
- AllowedSchemes = sanitizer.AllowedSchemes.ToList(),
- AllowDataAttributes = true
- };
- }
+ ///
+ /// Получаю параметры по умолчанию (разрешающие все теги)
+ ///
+ /// Параметры очистки
+ private static SanitizerAllowedHtml GetAll ()
+ {
+ // Создаю очиститель
+ HtmlSanitizer sanitizer = new();
- ///
- /// Параметры, оставляющие только текстовые теги
- ///
- /// Параметры очистки
- private static SanitizerAllowedHtml GetTextFormatOnly() =>
- new()
- {
- AllowedTags =
- [
- "strong", "b", "em", "i", "u", "hr", "strike", "div", "ol", "ul", "li", "p", "span", "h1", "h2", "h3",
- "h4"
- ],
-
- // ReSharper disable StringLiteralTypo
- AllowedAttributes =
- [
- "align", "bgcolor", "border", "cellpadding", "cellspacing", "charset", "checked", "class", "clear",
- "color",
- "cols", "colspan", "datetime", "disabled", "headers", "height", "high", "hspace", "label", "lang",
- "list",
- "low", "max", "maxlength", "min", "name", "nowrap", "placeholder", "required", "rev", "rows", "rowspan",
- "rules", "selected", "size", "span", "spellcheck", "style", "summary", "tabindex", "title", "type",
- "valign",
- "value", "vspace", "width", "wrap"
- ]
- // ReSharper restore StringLiteralTypo
- };
-
- ///
- /// Параметры, оставляющие только текстовые теги, а также img и a
- ///
- /// Параметры очистки
- private static SanitizerAllowedHtml GetImageAndLinks()
+ // Создаю модель
+ return new()
{
- // Получаю текстовые параметры
- SanitizerAllowedHtml result = AllowedTextOnly;
+ AllowedTags = sanitizer.AllowedTags.ToList(),
+ AllowedAttributes = sanitizer.AllowedAttributes.ToList(),
+ AllowedCssProperties = sanitizer.AllowedCssProperties.ToList(),
+ AllowedClasses = sanitizer.AllowedClasses.ToList(),
+ AllowedSchemes = sanitizer.AllowedSchemes.ToList(),
+ AllowDataAttributes = true
+ };
+ }
- // Добавляю теги
- result.AllowedTags.AddRange(["a", "img"]);
-
- // Добавляю параметры
- // ReSharper disable StringLiteralTypo
- result.AllowedAttributes.AddRange(["alt", "href", "hreflang", "nohref", "rel", "src", "target"]);
- // ReSharper restore StringLiteralTypo
-
- // Возвращаю результат
- return result;
- }
-
- ///
- /// Применяются все теги, кроме iframe
- ///
- /// Параметры очистки
- private static SanitizerAllowedHtml GetAllExceptIFrame()
+ ///
+ /// Параметры, оставляющие только текстовые теги
+ ///
+ /// Параметры очистки
+ private static SanitizerAllowedHtml GetTextFormatOnly () =>
+ new()
{
- // Получаю все параметры
- SanitizerAllowedHtml result = AllowedAll;
+ AllowedTags =
+ [
+ "strong", "b", "em", "i", "u", "hr", "strike", "div", "ol", "ul", "li", "p", "span", "h1", "h2", "h3",
+ "h4"
+ ],
- // Удаляю iframe
- result.AllowedTags.Remove("iframe");
+ // ReSharper disable StringLiteralTypo
+ AllowedAttributes =
+ [
+ "align", "bgcolor", "border", "cellpadding", "cellspacing", "charset", "checked", "class", "clear",
+ "color",
+ "cols", "colspan", "datetime", "disabled", "headers", "height", "high", "hspace", "label", "lang",
+ "list",
+ "low", "max", "maxlength", "min", "name", "nowrap", "placeholder", "required", "rev", "rows", "rowspan",
+ "rules", "selected", "size", "span", "spellcheck", "style", "summary", "tabindex", "title", "type",
+ "valign",
+ "value", "vspace", "width", "wrap"
+ ]
+ // ReSharper restore StringLiteralTypo
+ };
- // Возвращаю результат
- return result;
- }
+ ///
+ /// Параметры, оставляющие только текстовые теги, а также img и a
+ ///
+ /// Параметры очистки
+ private static SanitizerAllowedHtml GetImageAndLinks ()
+ {
+ // Получаю текстовые параметры
+ SanitizerAllowedHtml result = AllowedTextOnly;
- #endregion
+ // Добавляю теги
+ result.AllowedTags.AddRange(["a", "img"]);
+
+ // Добавляю параметры
+ // ReSharper disable StringLiteralTypo
+ result.AllowedAttributes.AddRange(["alt", "href", "hreflang", "nohref", "rel", "src", "target"]);
+ // ReSharper restore StringLiteralTypo
+
+ // Возвращаю результат
+ return result;
+ }
+
+ ///
+ /// Применяются все теги, кроме iframe
+ ///
+ /// Параметры очистки
+ private static SanitizerAllowedHtml GetAllExceptIFrame ()
+ {
+ // Получаю все параметры
+ SanitizerAllowedHtml result = AllowedAll;
+
+ // Удаляю iframe
+ result.AllowedTags.Remove("iframe");
+
+ // Возвращаю результат
+ return result;
+ }
+
+ #endregion
}
\ No newline at end of file
diff --git a/anbs_cpfn/anbs_cpfn.csproj b/anbs_cpfn/anbs_cpfn.csproj
index 7bfa656..bc00046 100644
--- a/anbs_cpfn/anbs_cpfn.csproj
+++ b/anbs_cpfn/anbs_cpfn.csproj
@@ -6,7 +6,7 @@
enable
True
ANBSoftware.ComponentsPackForNet
- 2024.3.11.0
+ 2024.3.11.1
Александр Бабаев
Набор компонентов ANB Software для ASP.NET Core
Библиотека полезных методов языка C# для ASP.NET Core