Санитар ammonia

Безопасность в вебе - это та еще головная боль. Кажется, ну что может случиться на личном сайте? Я же не даю никому доступ к админке. Ага, щас.

Один неосторожный символ в тексте - и привет. Кто-то вставит скрипт, и он выполнится в браузере у читателя.

У меня в проекте за это отвечает библиотека с приятным названием ammonia. По сути, это такой вышибала для HTML-кода.

Как это работает у меня.

Пайплайн простой.

Я пишу пост в Markdown. Это обычный текст, без опасных тегов. Дальше движок берет Markdown и превращает его в HTML через библиотеку pulldown-cmark. И вот тут на сцену выходит ammonia.

Она живет в моем коде в функции sanitize_html. Она берет этот готовый HTML и пропускает через себя.

Если там затесался какой-нибудь <script>, <iframe> или гадость вроде onclick, она это беспощадно вырезает. Опасные ссылки, которые начинаются с javascript:, тоже отсекаются на раз-два.

В итоге, даже если я сам случайно, или ИИ по глупости, вставим в текст вредоносный код - он просто не выполнится. Читатель в безопасности.

Но есть нюанс. ammonia не просто тупо всё запрещает. Иначе поломался бы весь полезный функционал. Она настроена так, чтобы пропускать нужные вещи.

Например, чекбоксы для списков задач. Если я пишу пост с планами и ставлю галочки, они нормально отображаются и работают. Не превращаются в кашу.

Это и есть искусство настройки санитайзера. Нужно отрезать всё опасное, но сохранить то, что делает текст живым и удобным.

Впринципе, я спокоен. Даже если ИИ в очередной раз попытается зделать что-то странное, ammonia его прикроет.

Безопасность - это не та штука, которую видно. Но когда ее нет, сразу становится больно.