«Наш сайт взломали» — фраза, от которой у любого владельца бизнеса холодеет внутри. Потеря данных клиентов, кража паролей, подмена счетов. Репутация рушится за минуты. Для малого бизнеса взлом часто означает закрытие.
Хорошая новость: большинства атак можно избежать, если изначально заложить правильную архитектуру. Плохая новость: многие самописные системы и даже типовые CMS имеют уязвимости. В Falcon Space безопасность встроена на уровне ядра. Расскажу, от чего мы защищаем и что ещё можете сделать вы.
SQL-инъекции — злоумышленник вставляет SQL-код в поле ввода (например, в строку поиска), чтобы выполнить произвольный запрос к базе данных. Может прочитать чужие пароли, удалить таблицы, украсть данные.
XSS (межсайтовый скриптинг) — злоумышленник вставляет JavaScript-код в комментарии, отзывы или поля профиля. Когда другой пользователь открывает страницу, этот код выполняется. Может украсть сессию, перенаправить на фишинговый сайт, подменить форму оплаты.
Обе атаки — в топе веб-уязвимостей последних лет.
В классическом веб-приложении (PHP, Java, C#) программист часто строит SQL-запросы склеиванием строк: SELECT * FROM users WHERE id = ' + userId + '. Если злоумышленник передаст userId = 1; DROP TABLE users; --, он может уничтожить базу.
В Falcon Space вся ваша бизнес-логика — это хранимые процедуры. Они вызываются с параметрами, которые строго типизированы и не могут быть интерпретированы как SQL-код. Пример:
CREATE PROCEDURE [app].[get_user]
@user_id int
AS
BEGIN
SELECT * FROM users WHERE user_id = @user_id;
END
Даже если передать в @user_id строку, SQL Server выдаст ошибку преобразования типов и ничего страшного не произойдёт.
Важно: если вы пишете свои процедуры, никогда не используйте динамическое выполнение SQL (sp_executesql с конкатенацией строк). Только параметризованные запросы. Этому правилу следуют все наши разработчики, и мы рекомендуем его вам.
XSS возникает, когда сайт выводит данные, введённые пользователем, без экранирования. Например, пользователь в поле «Имя» написал <script>alert('XSS')</script>, и этот код выводится на странице другого пользователя.
В Falcon Space все данные, выводимые через стандартные компоненты (таблицы, формы), автоматически экранируются — теги превращаются в < и >. Пользовательский скрипт не выполнится.
Если вы выводите данные через свой HTML-код (например, в кастомном лендинге), вы должны экранировать их сами. Для этого в платформе есть функция html_encode. Или просто не позволяйте пользователям вводить HTML-теги — добавьте валидацию.
У нас также есть глобальная настройка, которая фильтрует все пользовательские поля ввода, удаляя потенциально опасные теги. Рекомендуем её включить.
Ещё одна частая уязвимость: пользователь с ролью «Клиент» может, подставив ID в URL (например, /order/123 вместо /order/456), посмотреть данные другого клиента.
В Falcon Space мы защищаемся на уровне данных: в SQL-процедуры передаётся параметр @username (текущий пользователь), и процедура фильтрует данные, возвращая только те записи, которые принадлежат этому пользователю. Пример:
CREATE PROCEDURE [app].[get_my_orders]
@username nvarchar(100)
AS
BEGIN
SELECT * FROM orders WHERE customer_username = @username;
END
Даже если злоумышленник угадает ID чужого заказа, процедура не вернёт его, потому что @username не совпадёт.
Такой подход называется «row-level security» на уровне приложения. Он надёжен и не требует сложных настроек.
Платформа даёт инструменты, но некоторые меры безопасности зависят от вас:
Безопасность — это не тумблер «включить», а процесс. Но правильная архитектура решает 80% проблем. В Falcon Space она правильная.
Вы можете заказать пентест (тест на проникновение) у специалистов. Стоит от 30 до 100 тыс. руб. Они попробуют взломать ваш сайт и выдадут отчёт с уязвимостями.
Или вы можете провести базовую проверку сами:
<script>alert(1)</script>. Если появляется окно с сообщением — есть XSS.' OR '1'='1. Если сайт показывает все записи (например, все заказы) — есть SQL-инъекция.Если вы нашли такие уязвимости — срочно обратитесь к разработчику.
Мы проводим аудит безопасности для проектов на Falcon Space (входит в гарантийное обслуживание для клиентов, купивших лицензию). Проверяем процедуры на фильтрацию по @username, наличие экранирования, настройки сервера. Если вы хотите заказать аудит отдельно — стоимость 20-30 тыс. руб.
Лучше потратить небольшие деньги на профилактику, чем потом платить штрафы и терять клиентов.