Как защититься от XSS и SQL-инъекций в личных кабинетах – встроенная защита платформы

«Наш сайт взломали» — фраза, от которой у любого владельца бизнеса холодеет внутри. Потеря данных клиентов, кража паролей, подмена счетов. Репутация рушится за минуты. Для малого бизнеса взлом часто означает закрытие.

Хорошая новость: большинства атак можно избежать, если изначально заложить правильную архитектуру. Плохая новость: многие самописные системы и даже типовые CMS имеют уязвимости. В Falcon Space безопасность встроена на уровне ядра. Расскажу, от чего мы защищаем и что ещё можете сделать вы.

Две главные угрозы для сайта с личными кабинетами

SQL-инъекции — злоумышленник вставляет SQL-код в поле ввода (например, в строку поиска), чтобы выполнить произвольный запрос к базе данных. Может прочитать чужие пароли, удалить таблицы, украсть данные.

XSS (межсайтовый скриптинг) — злоумышленник вставляет JavaScript-код в комментарии, отзывы или поля профиля. Когда другой пользователь открывает страницу, этот код выполняется. Может украсть сессию, перенаправить на фишинговый сайт, подменить форму оплаты.

Обе атаки — в топе веб-уязвимостей последних лет.

Как Falcon Space защищает от SQL-инъекций

В классическом веб-приложении (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 с конкатенацией строк). Только параметризованные запросы. Этому правилу следуют все наши разработчики, и мы рекомендуем его вам.

Как Falcon Space защищает от XSS

XSS возникает, когда сайт выводит данные, введённые пользователем, без экранирования. Например, пользователь в поле «Имя» написал <script>alert('XSS')</script>, и этот код выводится на странице другого пользователя.

В Falcon Space все данные, выводимые через стандартные компоненты (таблицы, формы), автоматически экранируются — теги превращаются в &lt; и &gt;. Пользовательский скрипт не выполнится.

Если вы выводите данные через свой 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 тыс. руб. Они попробуют взломать ваш сайт и выдадут отчёт с уязвимостями.

Или вы можете провести базовую проверку сами:

Если вы нашли такие уязвимости — срочно обратитесь к разработчику.

Мы проводим аудит безопасности для проектов на Falcon Space (входит в гарантийное обслуживание для клиентов, купивших лицензию). Проверяем процедуры на фильтрацию по @username, наличие экранирования, настройки сервера. Если вы хотите заказать аудит отдельно — стоимость 20-30 тыс. руб.

Лучше потратить небольшие деньги на профилактику, чем потом платить штрафы и терять клиентов.

Страница-источник на сайте falconspace.ru