Журнал
Разбираем SaaS, веб-разработку, SEO и кибербезопасность простым языком — на основе нашего опыта.
Security.txt и работающий приём сообщений: Contact, Expires, ответственный, замещение и проверка доставки. Контакт отдельно от разрешения тестов и оплаты.
Границы безопасной загрузки картинки по URL: источники, соединения, DNS, перенаправления и обработка ответа. Контролируемый отказ без произвольных запросов.
Как связать SBOM с реально запущенным выпуском: lock, артефакт, образ и окружение. Инвентаризация отдельно от предупреждений и подтверждённого обновления.
Почему HSTS сохраняется после удаления заголовка: браузерная политика, родитель, поддомены и preload. Безопасный план проверки и пределы быстрого отката.
Что защищает PKCE в мобильном входе: verifier, challenge, S256 и отдельная попытка. Почему встроенный client_secret не заменяет этот контракт.
CNAME остался после удаления сервиса: как связать DNS, облачный ресурс и владельца. План отключения, проверка остаточных маршрутов и границы вывода о риске.
Запрос работает в curl, а браузер сообщает CORS: проверяем Origin, OPTIONS, основной ответ и credentials. Исправление без отключения авторизации и допуска всех.
Noopener, noreferrer и новая вкладка: связь окон, передача referrer и отдельный контракт window.open. Проверка обычной ссылки и согласованного popup.
Как ограничить XML-парсер при импорте: внешние сущности, DTD, схемы и преобразования. Паспорт разрешений, безопасный отказ и порядок приёмки обмена.
Как задать лимиты ZIP-импорта: распакованный объём, число файлов, вложенность и параллельные задания. Учебный расчёт бюджета диска и отказ без частичного импорта.
Как безопасно принимать postMessage от iframe: origin, source, формат данных и разрешённые действия. Таблица договора обмена на примере изменения высоты виджета.
SSH предупреждает о смене ключа сервера: как подтвердить отпечаток, проверить перенос и обновить доверие. Порядок действий без отключения проверки узла.
Unknown collation при импорте базы: как сверить версии MySQL и MariaDB, выбрать путь переноса и проверить сравнение строк, сортировку и уникальные поля.
WebSocket за nginx обрывается после простоя: как проверить Upgrade, последний ответ сервера, таймаут и heartbeat. Лента сеанса и приёмка восстановления.
SSE-события появляются пачкой: проверка формата, выдачи приложения, proxy_buffering и внешних посредников. Карта задержки и приёмка после переподключения.
После смены NS домен отвечает SERVFAIL: как проверить делегирование, DS, DNSKEY и подписи. Карта ответственности и восстановление нормальной проверки DNSSEC.
SQLite сообщает database is locked: отличия BUSY и LOCKED, владелец транзакции и предел ожидания. Таблица диагностики без удаления журналов базы.
Redis отвечает OOM: как различить предел maxmemory и завершение процесса, проверить назначение ключей и выбрать действие без потери обязательных данных.
Контейнер завершился с кодом 137: как сопоставить OOMKilled, события Docker, лимит памяти и журнал хоста. Проверка причин и повторного запуска.
Nginx пишет Too many open files: где проверить лимит worker, занятые дескрипторы и настройки systemd. Таблица уровней и приёмка без случайных огромных значений.
EADDRINUSE после перезапуска Node.js: как найти владельца порта и источник второго запуска. Карта процессов, порядок остановки и проверка маршрута.
MySQL Packet Too Large при импорте: размер запроса, пределы клиента и сервера, большой INSERT и BLOB. Как проверить решение и не повторить частичный импорт.
Too many hops и петля пересылки: как восстановить маршрут письма, проверить алиасы и найти обратный переход. Таблица владельцев правил и контроль доставки.
Ошибка 413 при загрузке: как найти отказавший слой, отличить размер файла от тела запроса и проверить лимиты nginx, PHP и приложения без безлимитных настроек.