Как использовать промпты для безопасной генерации SQL-запросов
АйТи Фреш
Информационная безопасность

Безопасная генерация SQL-запросов с помощью промптов

Автор: , директор ООО «АйТи-Фреш» · · ~10 мин чтения
Иллюстрация безопасности при генерации SQL-запросов с помощью промптов
Иллюстрация к статье «Безопасная генерация SQL-запросов с помощью промптов».

AI-инструменты позволяют быстро генерировать SQL-запросы, но неправильно составленный промпт может привести к SQL-инъекциям. Системный подход к формулированию запросов — ключ к безопасности.

Что такое промпт и почему он критичен для безопасности

Промпт — это инструкция, которую вы подаёте нейросети, чтобы получить определённый результат. В контексте генерации SQL-запросов промпт определяет структуру, логику и ограничения, которые должен учитывать ИИ. Неправильно сформулированный промпт может привести к генерации вредоносных запросов, особенно если в нём не учтены правила аутентификации, авторизации или ограничения на доступ к данным.

ИИ не имеет интуиции. Он не знает, что такое «безопасный» запрос. Он просто выполняет то, что ему сказано. Если вы скажете: «Напиши запрос, который покажет все пользователи с ролью администратора», — он это сделает. Без дополнительных ограничений, без проверки контекста, без учёта прав доступа. Это и есть уязвимость.

Если вы работаете с системой, где есть роли и права, промпт должен включать это. Например, вы можете указать: «Генерируй запрос, который возвращает только пользователей с ролью 'пользователь'. Проверь, что запрос не содержит операторов, которые могут повредить базу данных. Используй только SELECT.» Это снижает риск, что ИИ сгенерирует вредоносный код.

Промпт — это не просто текст. Это контекст. Если вы не укажете, что запрос должен быть безопасным, ИИ не поймёт, что это важно. Он не знает, что утечка данных — это плохо. Он знает только, что вы сказали: «Напиши запрос». И он выполнит это, не задавая вопросов.

ИИ может интерпретировать фразы иначе, чем вы ожидаете. Например, если вы скажете: «Напиши запрос, который покажет всех пользователей», — он может сгенерировать запрос, который не фильтрует по роли. И это будет технически корректным. Но это не безопасно.

Что такое промпт и почему он критичен для безопасности: Важно понимать, что ИИ не обладает интуицией
Важно понимать, что ИИ не обладает интуицией

Риски небезопасных промптов

Небезопасные промпты могут быть использованы для генерации вредоносных SQL-запросов, что приводит к утечке данных и несанкционированному доступу. Например, если промпт содержит фразу «покажи все данные из таблицы users», ИИ может сгенерировать запрос, который не фильтрует по роли или не проверяет, имеет ли пользователь право на доступ. Это создаёт уязвимость, которую можно использовать для атаки.

Также существует риск, что промпт может быть подделан или изменён. Например, если вы используете AI-инструмент через веб-интерфейс, злоумышленник может вставить свой промпт, который сгенерирует вредоносный код. Даже если вы не используете внешние интерфейсы, неверно сформулированный промпт может привести к генерации запросов, которые нарушат целостность базы данных или позволят выполнить произвольные действия.

Если вы используете AI-инструменты в корпоративной среде, где есть много пользователей и систем, риск увеличивается. Например, если один из сотрудников сформулирует промпт: «Напиши запрос, который покажет всех пользователей с доступом к финансовым данным», — ИИ сгенерирует запрос, который может быть использован для кражи данных. И это будет технически корректно.

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

Если вы не проверяете сгенерированный код, вы рискуете. И это не только ошибка в промпте. Это ошибка в процессе. И ИИ — это не магия. Он не знает, что вы не хотите, чтобы данные утекли. Он просто выполняет то, что вы сказали.

Риски небезопасных промптов: Также существует риск, что промпт может быть подделан или изменён
Также существует риск, что промпт может быть подделан или изменён

Как правильно формулировать промпты для генерации SQL-запросов

Чтобы избежать ошибок, промпт должен быть чётким, конкретным и содержать ограничения. Например, вместо «напиши запрос для получения данных о пользователях» лучше использовать: «Напиши запрос, который возвращает имя, email и дату регистрации пользователя, у которого роль — 'пользователь'. Запрос должен быть безопасным и не использовать подстановку параметров через строку. Используй параметризованный запрос.»

Также важно учитывать контекст. Если вы работаете с системой, где есть роли и права, промпт должен включать это. Например: «Напиши запрос, который возвращает данные о пользователях, которые имеют право на доступ к определённому разделу системы. Проверь, что пользователь имеет роль 'менеджер' или 'администратор'. Используй JOIN с таблицей ролей.» Это снижает риск утечки данных.

Промпт должен быть максимально конкретным. Например, вместо «напиши запрос, который покажет всех пользователей» лучше использовать: «Напиши запрос, который возвращает только пользователей с ролью 'пользователь'. Используй фильтр по полю role.» Это уменьшает вероятность ошибки.

Также полезно использовать шаблоны. Например, шаблон может выглядеть так: «Запрос должен возвращать только поля: имя, email, дата регистрации. Должен быть фильтр по роли: 'пользователь'. Использовать параметризованный запрос. Не использовать подстановку значений через строку.» Шаблоны упрощают процесс и снижают вероятность ошибок.

Если вы используете AI-инструменты в команде, важно, чтобы все понимали, как формулировать промпты. Иначе один неверно сформулированный промпт может привести к утечке данных. И это будет не только проблемой одного человека. Это будет проблемой всей команды.

Использование безопасных промптов: принципы и практика

Безопасные промпты включают в себя явные ограничения, проверки и контекст. Например, вы можете указать: «Генерируй SQL-запрос, который возвращает только те данные, которые соответствуют текущему пользователю. Проверь, что запрос не содержит операторов, которые могут повредить базу данных, такие как DROP или DELETE. Используй только SELECT.» Это уменьшает риск, что ИИ сгенерирует вредоносный код.

Также полезно использовать промпты для проверки запросов. Например: «Проверь, что сгенерированный SQL-запрос не содержит операторов, которые могут повредить базу данных. Проверь, что запрос фильтрует по роли пользователя.» Это добавляет дополнительный уровень безопасности.

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

Также полезно использовать промпты для объяснения запросов. Например: «Объясни, как работает сгенерированный SQL-запрос.» Это помогает понять, что именно делает запрос, и выявить возможные ошибки.

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

Порядок действий: как правильно использовать промпты

Первое, что нужно сделать, — это определить, что вы хотите получить. Например, вы можете захотеть получить список пользователей с определённой ролью. Или вы можете захотеть получить данные о пользователях, которые имеют доступ к определённому разделу системы.

Второе — это составить промпт. Промпт должен быть чётким, конкретным и содержать ограничения. Например: «Напиши запрос, который возвращает имя, email и дату регистрации пользователя, у которого роль — 'пользователь'. Запрос должен быть безопасным и не использовать подстановку параметров через строку. Используй параметризованный запрос.»

Третье — это проверить сгенерированный код. Используйте инструменты для анализа кода, такие как SQL-анализаторы или линтеры. Также полезно использовать промпты для проверки запросов. Например: «Проверь, что сгенерированный SQL-запрос не содержит операторов, которые могут повредить базу данных. Проверь, что запрос фильтрует по роли пользователя.»

Четвёртое — это внедрить проверку в процесс. Например, вы можете использовать CI/CD-пайплайн, который автоматически проверяет сгенерированный код. Это снижает риск, что вредоносный код попадёт в систему.

Пятое — это обучение. Если вы используете AI-инструменты в команде, важно, чтобы все понимали, как формулировать промпты. Иначе один неверно сформулированный промпт может привести к утечке данных.

Типовые ошибки и как их избежать

Одна из самых распространённых ошибок — это отсутствие ограничений. Например, если вы скажете: «Напиши запрос, который покажет всех пользователей», — ИИ сгенерирует запрос, который не фильтрует по роли. И это будет технически корректно, но не безопасно.

Другая распространённая ошибка — это использование подстановки параметров через строку. Например, если вы скажете: «Напиши запрос, который покажет всех пользователей с именем 'admin'», — ИИ может сгенерировать запрос, который использует подстановку через строку. Это создаёт уязвимость.

Третья ошибка — это отсутствие проверки контекста. Например, если вы используете AI-инструменты в корпоративной среде, где есть много пользователей и систем, риск увеличивается. Например, если один из сотрудников сформулирует промпт: «Напиши запрос, который покажет всех пользователей с доступом к финансовым данным», — ИИ сгенерирует запрос, который может быть использован для кражи данных.

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

Пятая ошибка — это отсутствие проверки. Если вы не проверяете сгенерированный код, вы рискуете. И это не только ошибка в промпте. Это ошибка в процессе. И ИИ — это не магия. Он не знает, что вы не хотите, чтобы данные утекли. Он просто выполняет то, что вы сказали.

Как проверить результат

Проверка сгенерированного кода — это обязательный шаг. Используйте инструменты для анализа кода, такие как SQL-анализаторы или линтеры. Это снижает риск, что вредоносный код попадёт в систему.

Если вы используете AI-инструменты в продакшене, важно, чтобы сгенерированный код проходил проверку. Например, вы можете использовать CI/CD-пайплайн, который автоматически проверяет сгенерированный код. Это снижает риск, что вредоносный код попадёт в систему.

Что делать, если уже сломалось

Если вы уже использовали небезопасный промпт и сгенерировали вредоносный код, важно действовать быстро. Сначала остановите использование AI-инструментов. Затем проверьте, какие данные могли быть украдены.

Далее проведите аудит системы. Проверьте, какие запросы были сгенерированы, и убедитесь, что они не содержат вредоносных операторов. Также проверьте, есть ли в системе какие-либо подозрительные действия.

Третье — это обучение. Если вы используете AI-инструменты в команде, важно, чтобы все понимали, как формулировать промпты. Иначе один неверно сформулированный промпт может привести к утечке данных.

Четвёртое — это внедрение мер безопасности. Например, вы можете использовать CI/CD-пайплайн, который автоматически проверяет сгенерированный код. Это снижает риск, что вредоносный код попадёт в систему.

Пятое — это мониторинг. Если вы используете AI-инструменты, важно мониторить, какие запросы генерируются. Это поможет выявить возможные ошибки и уязвимости.

Частые вопросы

Можно ли использовать промпты для генерации SQL-запросов?

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

Как правильно формулировать промпт для генерации кода, чтобы избежать ошибок?

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

Какой моделью рекомендуется пользоваться для генерации SQL-запросов?

Рекомендуется использовать модели, которые специально обучены на коде. Например, модели из семейства GPT или Llama, которые хорошо справляются с задачами генерации кода.

Что такое безопасные промпты в контексте генеративного ИИ?

Безопасные промпты — это инструкции, которые учитывают ограничения, правила и контекст, чтобы избежать генерации вредоносного кода или уязвимостей.

Как правильно формулировать промпт для генерации кода, чтобы избежать поверхностного покрытия?

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

Можно ли использовать промпты для создания тестов?

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

Столкнулись с похожей задачей? Обращайтесь — решим

Если у вас происходит что-то из описанного в этой статье — или любая другая проблема с ИТ-инфраструктурой, — обращайтесь в любое время. Мои специалисты и я лично разберём ситуацию, найдём настоящую причину и доведём до решения.

Возьмёмся и за разовую задачу, и за постоянное обслуживание. Первичная консультация — бесплатно и без обязательств.

📞 +7 903 729-62-41 ✈ Telegram @ITfresh_Boss

С уважением, Семёнов Евгений Сергеевич, директор «АйТи Фреш» — IT-аутсорсинг для компаний до 50 рабочих мест, 15+ лет практики

Источники

© ООО «АйТи-Фреш» · Москва · Все статьи