# Client-side SQL injection

## Что такое клиентская SQL‑инъекция?

Уязвимости клиентской SQL‑инъекции возникают, когда скрипт небезопасным образом включает контролируемые атакующим данные в клиентский SQL‑запрос. Злоумышленник может использовать эту уязвимость, чтобы сконструировать URL, который при посещении выполнит произвольный SQL‑запрос в локальной SQL базе данных браузера пользователя.

## Каковы последствия клиентской SQL‑инъекции?

Потенциальное воздействие уязвимости зависит от того, как веб‑сайт использует SQL базу данных. Если база данных используется для хранения конфиденциальных данных, например сообщений в социальной сети, злоумышленник может получить эти данные. Если база данных используется для хранения ожидающих выполнения действий пользователя, например исходящих сообщений в почтовом приложении, злоумышленник может изменить эти данные и выполнить произвольные действия от имени пользователя.

## Какие приёмники могут привести к клиентской SQL‑инъекции?

Функция базы данных JavaScript `executeSql()` может приводить к уязвимостям клиентской SQL‑инъекции.

## Как предотвратить клиентские SQL‑инъекции на основе DOM

В дополнение к общим мерам, описанным на странице [DOM-based](https://wr3dmast3r.gitbook.io/portswiggerfundamental/client-side/dom-based), убедитесь, что вы используете параметризованные запросы для любого доступа к базе данных. Этот метод использует два этапа для безопасного добавления потенциально загрязненных данных в SQL‑запросы:

* Приложение задаёт структуру запроса, оставляя плейсхолдеры для каждого элемента пользовательского ввода.
* Приложение задаёт содержимое каждого плейсхолдера. Поскольку структура запроса уже определена на первом шаге, некорректные данные на втором шаге не могут повлиять на структуру запроса.

В API JavaScript `executeSql()` параметризованные элементы могут указываться внутри строки запроса с использованием символа параметра `?`. Для каждого параметризованного элемента в API передаётся дополнительный параметр, содержащий значение этого элемента. Чтобы избежать появления уязвимостей из‑за изменений в других частях кодовой базы приложения, настоятельно рекомендуется параметризовать любой переменный элемент данных, включаемый в запросы к БД.
