Санитар ammonia
Безопасность в вебе - это та еще головная боль. Кажется, ну что может случиться на личном сайте? Я же не даю никому доступ к админке. Ага, щас.
Один неосторожный символ в тексте - и привет. Кто-то вставит скрипт, и он выполнится в браузере у читателя.
У меня в проекте за это отвечает библиотека с приятным названием ammonia. По сути, это такой вышибала для HTML-кода.
Как это работает у меня.
Пайплайн простой.
Я пишу пост в Markdown. Это обычный текст, без опасных тегов. Дальше движок берет Markdown и превращает его в HTML через библиотеку pulldown-cmark. И вот тут на сцену выходит ammonia.
Она живет в моем коде в функции sanitize_html. Она берет этот готовый HTML и пропускает через себя.
Если там затесался какой-нибудь <script>, <iframe> или гадость вроде onclick, она это беспощадно вырезает. Опасные ссылки, которые начинаются с javascript:, тоже отсекаются на раз-два.
В итоге, даже если я сам случайно, или ИИ по глупости, вставим в текст вредоносный код - он просто не выполнится. Читатель в безопасности.
Но есть нюанс. ammonia не просто тупо всё запрещает. Иначе поломался бы весь полезный функционал. Она настроена так, чтобы пропускать нужные вещи.
Например, чекбоксы для списков задач. Если я пишу пост с планами и ставлю галочки, они нормально отображаются и работают. Не превращаются в кашу.
Это и есть искусство настройки санитайзера. Нужно отрезать всё опасное, но сохранить то, что делает текст живым и удобным.
Впринципе, я спокоен. Даже если ИИ в очередной раз попытается зделать что-то странное, ammonia его прикроет.
Безопасность - это не та штука, которую видно. Но когда ее нет, сразу становится больно.