Code Review AI-коду
Як ефективно перевіряти AI-згенерований код: чеклісти, типові вразливості та інструменти автоматизованого сканування
📎ОФІЦІЙНА ДОКУМЕНТАЦІЯ
Code Review AI-згенерованого коду
AI-згенерований код потребує особливої уваги при code review. AI-моделі можуть створювати код, який виглядає правильно, але містить тонкі вразливості.
AI-згенерований код -- це завжди ненадійний код до моменту його верифікації. Ніколи не деплойте AI-код без ретельного review.
Типові вразливості в AI-коді
1. Injection-вразливості
AI часто генерує код з SQL injection, XSS та command injection:
// НЕБЕЗПЕЧНО -- 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-ключі, паролі або токени прямо в код:
# НЕБЕЗПЕЧНО
api_key = "sk-1234567890abcdef"
# БЕЗПЕЧНО
api_key = os.environ.get("API_KEY")
3. Недостатня валідація вводу
AI-код часто не перевіряє вхідні дані:
- Відсутність перевірки типів
- Відсутність обмежень на довжину
- Відсутність sanitization
4. Застарілі бібліотеки
AI навчений на коді різних періодів і може пропонувати:
- Застарілі API (deprecated functions)
- Бібліотеки з відомими вразливостями
- Неактуальні патерни безпеки
5. Неправильна обробка помилок
# НЕБЕЗПЕЧНО -- 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
Інструменти автоматизованого сканування
| Інструмент | Тип | Мови | Особливості |
|---|---|---|---|
| SonarQube | SAST | 30+ | Комплексний аналіз якості та безпеки |
| Semgrep | SAST | 20+ | Швидкий, настроювані правила |
| CodeQL | SAST | 10+ | Глибокий аналіз, інтеграція з GitHub |
| Snyk | SCA + SAST | 20+ | Сканування залежностей та коду |
| Bandit | SAST | Python | Спеціалізований для Python |
| ESLint Security | SAST | JavaScript | Правила безпеки для JS/TS |
| Brakeman | SAST | Ruby | Спеціалізований для Rails |
Рекомендований набір
- SAST -- Semgrep або SonarQube для кожного PR
- SCA -- Snyk або Dependabot для залежностей
- Secrets -- GitLeaks або TruffleHog для пошуку секретів
- Linting -- ESLint/Pylint з правилами безпеки
Процес review AI-коду
Поради
Використовуйте AI для review AI-коду -- попросіть іншу модель перевірити згенерований код на вразливості. Але пам'ятайте, що це доповнення, а не заміна людському review.
- Розумійте код -- не merge код, який ви не розумієте
- Тестуйте edge cases -- AI часто ігнорує граничні випадки
- Перевіряйте бізнес-логіку -- AI може реалізувати не те, що потрібно
- Документуйте рішення -- фіксуйте, чому код був прийнятий або відхилений
Див. також
SAST, DAST та SCA інструменти
Безпека на кожному етапі розробки