Разрешить определенные атрибуты стиля с помощью ngSanitize
Я использую ngSanitize
в приложении AngularJS для удаления нежелательных или опасных частей. Однако содержимое создается с использованием редактора Richtext HTML и содержит некоторую информацию о стиле, которая удаляется (например, цвет текста).
Я знаю, что полезно удалить встроенные стили CSS, но я бы предпочел бы белый список с атрибутами CSS, которые не удаляются. Есть ли способ достичь этого без предоставления всех атрибутов CSS?
Ответы
Ответ 1
Считывая документацию для ngSanitize, похоже, что он использует два белых списка для определения того, какие данные блокировать (описано здесь, в $compileProvider
).
Два белых списка aHrefSanitizationWhitelist([regexp])
и imgSrcSanitizationWhitelist([regexp])
. Тем не менее, похоже, что эти два только обрабатывают URL-адреса ссылок для предотвращения атак XSS.
Вы можете использовать sce.trustAsHtml()
(или, возможно, data-bind-html-unsafe
, если это все еще вещь, но я думаю, что это не рекомендуется), но это не совсем то, что вы хотите; что откроет вам все HTML, безопасно или небезопасно.
Возможно, стоит проверить документацию для $sce
. Посмотрев на него до сих пор, есть возможность избежать CSS, но я не уверен, удастся ли он встроить CSS в HTML-тег. Пока я не вижу вариантов предоставления белого списка методу parseAs
.
Edit:
Просматривая исходный код $sanitize
похоже, он настроен на то, чтобы разрешить материал в тегах стиля, но не атрибуты стиля. Атрибуты стиля будут удалены путем дезинфекции, если вы не измените исходный код. Однако классы не разделяются, поэтому у вас может быть обходной путь. (Фактически, разрешая классы, а не встроенные стили, вы можете ограничить использование стилей в разделе комментариев.)
Единственной альтернативой было бы бросить свое собственное, кажется, если кто-то уже не имеет.
Ответ 2
У людей старше textAngular есть вилка ng-sanitize, которая позволит атрибуты стиля. Используйте их версию вместо ng-sanitize.