AI Wiki

Code Review AI-коду

Як ефективно перевіряти AI-згенерований код: чеклісти, типові вразливості та інструменти автоматизованого сканування

code-reviewAI-кодвразливостіSASTчеклістибезпека

📎ОФІЦІЙНА ДОКУМЕНТАЦІЯ

Code Review AI-згенерованого коду

AI-згенерований код потребує особливої уваги при code review. AI-моделі можуть створювати код, який виглядає правильно, але містить тонкі вразливості.

⚠️Увага

AI-згенерований код -- це завжди ненадійний код до моменту його верифікації. Ніколи не деплойте AI-код без ретельного review.


Типові вразливості в AI-коді

1. Injection-вразливості

AI часто генерує код з SQL injection, XSS та command injection:

javascript
// НЕБЕЗПЕЧНО -- AI може згенерувати такий код const query = `SELECT * FROM users WHERE name = '${userInput}'`; // БЕЗПЕЧНО -- параметризований запит const query = 'SELECT * FROM users WHERE name = ?'; db.execute(query, [userInput]);

2. Hardcoded Secrets

AI може вставити API-ключі, паролі або токени прямо в код:

python
# НЕБЕЗПЕЧНО api_key = "sk-1234567890abcdef" # БЕЗПЕЧНО api_key = os.environ.get("API_KEY")

3. Недостатня валідація вводу

AI-код часто не перевіряє вхідні дані:

  • Відсутність перевірки типів
  • Відсутність обмежень на довжину
  • Відсутність sanitization

4. Застарілі бібліотеки

AI навчений на коді різних періодів і може пропонувати:

  • Застарілі API (deprecated functions)
  • Бібліотеки з відомими вразливостями
  • Неактуальні патерни безпеки

5. Неправильна обробка помилок

python
# НЕБЕЗПЕЧНО -- AI часто генерує такий код try: result = do_something() except: pass # Проковтує всі помилки # БЕЗПЕЧНО try: result = do_something() except SpecificException as e: logger.error(f"Operation failed: {e}") raise

Чеклісти для Code Review

Безпека

  • Немає hardcoded secrets (API keys, passwords, tokens)
  • Параметризовані SQL-запити (без конкатенації)
  • Валідація та санітизація всіх вхідних даних
  • Правильна обробка помилок (без information disclosure)
  • Використання HTTPS для зовнішніх запитів
  • Правильне хешування паролів (bcrypt, argon2)
  • Немає path traversal вразливостей
  • CSRF-захист для форм
  • Правильна конфігурація CORS

Якість коду

  • Немає невикористаного коду
  • Немає закоментованого коду
  • Зрозумілі назви змінних та функцій
  • Відповідність стилю проєкту
  • Адекватне покриття тестами
  • Немає дублювання коду

AI-специфічне

  • Перевірено на hallucinated APIs (API, які не існують)
  • Залежності існують та актуальні
  • Ліцензії залежностей сумісні з проєктом
  • Логіка коду відповідає вимогам (а не просто виглядає правильно)
  • Немає витоку даних через logging

Інструменти автоматизованого сканування

ІнструментТипМовиОсобливості
SonarQubeSAST30+Комплексний аналіз якості та безпеки
SemgrepSAST20+Швидкий, настроювані правила
CodeQLSAST10+Глибокий аналіз, інтеграція з GitHub
SnykSCA + SAST20+Сканування залежностей та коду
BanditSASTPythonСпеціалізований для Python
ESLint SecuritySASTJavaScriptПравила безпеки для JS/TS
BrakemanSASTRubyСпеціалізований для Rails

Рекомендований набір

  1. SAST -- Semgrep або SonarQube для кожного PR
  2. SCA -- Snyk або Dependabot для залежностей
  3. Secrets -- GitLeaks або TruffleHog для пошуку секретів
  4. Linting -- ESLint/Pylint з правилами безпеки

Процес review AI-коду


Поради

💡Порада

Використовуйте AI для review AI-коду -- попросіть іншу модель перевірити згенерований код на вразливості. Але пам'ятайте, що це доповнення, а не заміна людському review.

  1. Розумійте код -- не merge код, який ви не розумієте
  2. Тестуйте edge cases -- AI часто ігнорує граничні випадки
  3. Перевіряйте бізнес-логіку -- AI може реалізувати не те, що потрібно
  4. Документуйте рішення -- фіксуйте, чому код був прийнятий або відхилений

Див. також

Валідація AI-коду

SAST, DAST та SCA інструменти

Безпечний SDLC

Безпека на кожному етапі розробки