Перейти к основному содержимому

Меню команд

Перейти на страницу или искать в каталоге

ИИ-инструменты и скрипты

Проверка безопасности Drizzle ORM

Проверьте проекты на Drizzle ORM перед деплоем: sql.raw(), собранный из данных запроса, пароли базы данных в drizzle.config или коде, drizzle-kit push --force в скриптах деплоя, delete без where, денежные столбцы типа float и внешние ключи без индексов.

$5.00

Что вы получите: 1 файл · 58.64 KB · ZIP

Варианты покупки

Описание товара

db.execute(sql.raw(`SELECT * FROM orders ORDER BY ${req.query.sort}`)) отправляет в базу данных собственный текст запроса в виде SQL, а стартовый скрипт, запускающий drizzle-kit push --force, без вопросов принимает каждую инструкцию, ведущую к потере данных, в продакшен-базе. Этот навык находит такие и другие ошибки Drizzle, перечисленные ниже, до деплоя и объясняет, как исправить каждую из них.

Ваш агент запускает сканер для ваших файлов drizzle.config, файлов схем (pgTable, sqliteTable, mysqlTable, в том числе через pgTableCreator, pgSchema или псевдоним), кода запросов на TypeScript и JavaScript и скриптов package.json. Он пропускает комментарии и тестовые файлы, отслеживает данные запросов из Express, Fastify, Koa, Hono, Next.js (обработчики маршрутов, cookies, server actions), tRPC, Nuxt и SvelteKit через локальные переменные и параметры функций, считает тегированный шаблон sql и конструктор запросов параметризованными, принимает значения, выбранные из фиксированного набора или ограниченные им проверкой, которая отклоняет всё остальное, и не трогает локальные учётные данные для разработки, примеры хостов и плейсхолдеры из документации самого Drizzle. Он никогда не запускает ваш код и не подключается к базе данных. Он возвращает BLOCK, REVIEW или NOT FLAGGED с указанием файла, строки, причины и более безопасного подхода. Секреты никогда не выводятся.

Что проверяется

BLOCK (исправьте до выпуска)

  • D01: данные запроса (включая input в tRPC, аргументы server actions и cookies) в sql.raw(), в том числе внутри шаблона sql или через JSON.stringify(), либо в обычной строке SQL, переданной в db.execute(), db.run(), db.all(), db.get() или db.values()
  • D02: пароли и токены базы данных, прописанные в URL подключения, dbCredentials, объекте подключения drizzle() или драйвера, в запасном значении через ?? или || или в скрипте package.json (URL, --password, --auth-token, PGPASSWORD=)
  • D03: drizzle-kit push --force, запускаемый скриптом start, build, deploy, release или install, напрямую или через другой npm-скрипт

REVIEW (проверьте перед релизом)

  • D11: sql.raw() или обычная строка SQL, собранная из параметра, сохранённых данных или результата другой функции
  • D12: sql.identifier() с именем таблицы или столбца из входных данных
  • D13: drizzle-kit push (без --force или --explain), запускаемый скриптом start, build, deploy, release или install
  • D14: денежные столбцы (price, amount, balance, total...), хранящиеся как real, double или float
  • D15: столбцы паролей, имена которых не указывают, что в них хранится хеш (таблицы учётных записей Better Auth не затрагиваются)
  • D16: внешние ключи без индекса на ссылающемся столбце в таблицах PostgreSQL, SQLite и SQL Server
  • D17: db.delete(table) или db.update(table).set() без where() вне скриптов наполнения (seed) и сброса
  • D18: drizzle-kit studio, запущенный с --host 0.0.0.0
  • D19: отключённые проверки сертификатов базы данных (rejectUnauthorized: false, trustServerCertificate: true, sslmode=no-verify, NODE_TLS_REJECT_UNAUTHORIZED=0, ssl: 'require' в postgres.js)

Что входит в комплект

  • Сканер (Python 3.9+, только стандартная библиотека)
  • Руководство по правилам с причиной, более безопасным подходом и официальным источником для каждого правила
  • Рискованный и безопасный примеры проектов (drizzle.config.ts, схема, маршруты Express, package.json), а также реальный отчёт сканера по рискованному примеру

Ограничения

Он читает каждый файл отдельно и отслеживает данные запроса только через переменные в этом файле: значения, переданные из вспомогательных функций в других файлах, сообщаются как D11, а не D01, а области видимости определяются по скобкам и объявлениям, а не полноценным парсером. Файлы SQL-миграций, файлы .env, Dockerfile, CI-воркфлоу и файлы .svelte, .vue или .astro не читаются; версия Drizzle, права в базе данных и политики безопасности на уровне строк не проверяются. NOT FLAGGED не является гарантией.

Содержимое

Один ZIP-файл с 22 файлами: SKILL.md, сканер в scripts/ (9 файлов Python), references/rules.md (каждое правило с причиной и более безопасным подходом) и examples/ (10 файлов примеров плюс report.md, реальный вывод сканера для рискованного примера).

Как использовать: Это навык для агента: папка с файлом SKILL.md и скриптами Python, которые может запускать ИИ-агент для программирования, например Claude Code, Cursor или Codex CLI. Распакуйте его в папку навыков вашего агента (для Claude Code: ~/.claude/skills/), затем попросите агента проверить ваш проект. Скрипты также работают самостоятельно с Python 3.9 или новее, ничего устанавливать не нужно. Они только читают ваши файлы: без доступа к сети, никакие данные никуда не отправляются.

Что вы получите

1 файл · 58.64 KB

  • drizzle-orm-safety-check-1.0.0.zipZIP · 58.64 KB
ЛицензияКоммерческое использование разрешено
Проверка пакетаПройдена

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

Опубликовано12 нояб. 2026 г.
Размер файла58.64 KB
Формат файлаZIP
Версияv1.0

Теги

drizzleormsql-injectiondatabasetypescriptai agent skill
R
RR HH

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

Доступ открывается сразу?

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

Можно ли использовать в коммерческих проектах?

Да. Коммерческое использование разрешено: в своём бизнесе и в том, что вы продаёте. Перепродавать и распространять сам файл нельзя.

Какие условия возврата?

Запросить возврат можно в течение 30 дней. Если что-то не так, оформите заявку в своём заказе - её рассмотрит команда Getly.

Какие форматы и размеры файлов я получу?

Вы скачаете 1 файл - ZIP - всего 58.64 KB.

Обновления бесплатны?

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

Цена

$5.00