Skip to content
НАУЧЕТЕ

Сигурност на HTML

Как се филтрира съдържанието и какво изпраща редакторът.

Редакторът за форматиран текст взема HTML от браузър, а на браузъра не може да се вярва. RayCraft Write приема всичко, което идва от браузъра, за недоверено и го филтрира на сървъра, преди вашият код да го види.

Какво прави ContentFilter

  • Остават само елементи от списък с разрешени (списъкът по подразбиране покрива текст, списъци, таблици, изображения, връзки, фигури, details, аудио, видео и рамки със sandbox). script, style, object, embed, форми и всичко останало се махат.
  • Атрибутите за събития (onclick и подобни) винаги се махат.
  • Атрибутите се разрешават за всеки елемент поотделно: например href, target, rel за връзки; src, alt, width, height, loading за изображения; colspan, rowspan, scope за клетки.
  • Адресите се проверяват: javascript: и подобни схеми се махат. Връзките запазват http, https, mailto и tel и относителните адреси.
  • Рамки се запазват само за хостовете от Embed.AllowedHosts (по подразбиране www.youtube-nocookie.com и player.vimeo.com) и винаги със sandbox.
  • Атрибутите style се свеждат до списък от безопасни свойства.

Списъците се сменят с AddRte(o => o.Filter = new ContentFilterOptions { ... }). Стойностите по подразбиране са в ContentFilterOptions.DefaultAllowedTags, DefaultAllowedAttributes и DefaultAllowedAttributesByTag.

Къде се прилага

  • Вързаната Value, която редакторът праща към страницата ви (FilterIncomingHtml, включено по подразбиране).
  • HTML, който задавате със SetHtmlAsync или InsertHtmlAsync, и HTML, който първо се рисува на сървъра.
  • Поставено съдържание (то се чисти от разметката на Word и Excel още в браузъра, но на браузъра не се вярва: последната дума е на сървърния филтър).

Когато ползвате Rte.Processing без редактора (например в API, което получава HTML), извиквайте ContentFilter.Filter сами.

Преобразувания

Преобразуванията в Markdown и JSON не пропускат суров HTML. Изходите за писма и статичният изход се правят от филтрирания HTML.

Файлове и качване

  • FileSystemMediaStore проверява разширението спрямо Upload.AllowedTypes и AllowedImageTypes, проверява първите байтове на изображението, ограничава размера (Upload.MaxFileSize) и никога не ползва път от браузъра такъв, какъвто е.
  • Качването върви по връзката SignalR на страницата, затова иска същото оторизиране като страницата. Собствен IRteMediaStore трябва сам да оторизира всяко извикване: редакторът не знае кои са вашите потребители.
  • Сервирайте качените файлове от папка, в която не могат да се изпълняват скриптове, и за потребителско съдържание предпочитайте друго име на хост.

Какво остава ваша отговорност

  • Кодиране на изхода: показвайте записания HTML само след филтриране и с StaticRender.Render или в страница, която не изпълнява потребителски скриптове.
  • Оторизиране кой какъв документ може да редактира (DocumentId е име, а не право).
  • Ревизии и коментари във вашите хранилища: прилагайте свои правила за достъп.
  • Политика за сигурност на съдържанието (CSP) за вашия сайт. Редакторът зарежда скриптовете и стиловете си от _content/Rte/, а за формули и диаграми може да заредите KaTeX или Mermaid от място по ваш избор.
  • Защита на токена за feed-а (Инсталация).

Съобщаване на проблем

Ако намерите начин да прекарате скрипт през филтъра или да прочетете файл извън папката за медия, съобщете на RayCraft, преди да го публикувате. Данните за връзка са във файла с лиценза (Лиценз).

← Износ и вносЧЗВ →

Готови ли сте да пробвате RayCraft Write?

Започнете 14-дневния пробен период, без карта.

Започнете 14-дневен пробен период