Skip to content

Процесс код-ревью: /code-review и аудит безопасности

Чему вы научитесь

Код-ревью — ключевой этап обеспечения качества и безопасности кода. Этот урок поможет вам:

  • ✅ Использовать команду /code-review для автоматической проверки изменений
  • ✅ Понять разницу между агентами code-reviewer и security-reviewer
  • ✅ Освоить чек-лист безопасности (OWASP Top 10)
  • ✅ Обнаруживать и исправлять типичные уязвимости (SQL-инъекции, XSS, захардкоженные ключи и др.)
  • ✅ Применять стандарты качества кода (размер функций, длина файлов, покрытие тестами и др.)
  • ✅ Понимать критерии одобрения (CRITICAL, HIGH, MEDIUM, LOW)

Ваша текущая проблема

Вы написали код и готовы его закоммитить, но:

  • ❌ Не знаете, есть ли в коде уязвимости безопасности
  • ❌ Беспокоитесь, что упустили проблемы с качеством кода
  • ❌ Не уверены, соблюдены ли лучшие практики
  • ❌ Ручная проверка отнимает много времени и легко что-то пропустить
  • ❌ Хотите автоматически находить проблемы до коммита

Процесс код-ревью Everything Claude Code решает эти проблемы:

  • Автоматическая проверка: команда /code-review автоматически анализирует все изменения
  • Специализированное ревью: агент code-reviewer фокусируется на качестве кода, security-reviewer — на безопасности
  • Классификация по серьёзности: проблемы распределяются по уровням (CRITICAL, HIGH, MEDIUM, LOW)
  • Детальные рекомендации: каждая проблема содержит конкретные советы по исправлению

Когда использовать этот подход

Перед каждым коммитом следует запускать код-ревью:

  • ✅ После завершения новой функциональности
  • ✅ После исправления бага
  • ✅ После рефакторинга кода
  • ✅ При добавлении API-эндпоинтов (обязательно запустите security-reviewer)
  • ✅ При обработке пользовательского ввода (обязательно запустите security-reviewer)
  • ✅ При работе с аутентификацией/авторизацией (обязательно запустите security-reviewer)

Лучшая практика

Выработайте привычку: перед каждым git commit сначала запускайте /code-review. Если есть проблемы CRITICAL или HIGH — исправьте их перед коммитом.

🎒 Подготовка

Что вам понадобится:

  • Установленный Everything Claude Code (если ещё не установлен, см. Быстрый старт)
  • Некоторые изменения в коде (можно сначала написать код с помощью /tdd)
  • Базовое понимание работы с Git

Что не требуется:

  • Не нужно быть экспертом по безопасности (агент поможет с обнаружением)
  • Не нужно помнить все лучшие практики безопасности (агент напомнит)

Основная концепция

Everything Claude Code предоставляет два специализированных агента для ревью:

Агент code-reviewer

Фокусируется на качестве кода и лучших практиках, проверяет:

  • Качество кода: размер функций (>50 строк), длина файлов (>800 строк), глубина вложенности (>4 уровня)
  • Обработка ошибок: отсутствие try/catch, операторы console.log
  • Стандарты кода: соглашения об именовании, дублирование кода, иммутабельные паттерны
  • Лучшие практики: использование эмодзи, TODO/FIXME без номера тикета, отсутствие JSDoc
  • Покрытие тестами: отсутствие тестов для нового кода

Сценарии использования: все изменения кода должны проходить через code-reviewer.

Агент security-reviewer

Фокусируется на уязвимостях безопасности и угрозах, проверяет:

  • OWASP Top 10: SQL-инъекции, XSS, CSRF, обход аутентификации и др.
  • Утечка секретов: захардкоженные API-ключи, пароли, токены
  • Валидация ввода: отсутствующая или некорректная валидация пользовательского ввода
  • Аутентификация и авторизация: некорректная проверка подлинности и прав доступа
  • Безопасность зависимостей: устаревшие или уязвимые пакеты зависимостей

Сценарии использования: код, связанный с безопасностью (API, аутентификация, платежи, пользовательский ввод), обязательно должен проходить через security-reviewer.

Классификация серьёзности проблем

УровеньЗначениеБлокирует коммит?Примеры
CRITICALКритическая уязвимость или серьёзная проблема качества❌ Обязательно блокируетЗахардкоженный API-ключ, SQL-инъекция
HIGHВажная проблема безопасности или качества кода❌ Обязательно блокируетОтсутствие обработки ошибок, XSS-уязвимость
MEDIUMПроблема среднего приоритета⚠️ Можно коммитить с осторожностьюИспользование эмодзи, отсутствие JSDoc
LOWНезначительная проблема✓ Можно исправить позжеНесогласованное форматирование, магические числа

Практика: первое код-ревью

Шаг 1: Создайте изменения в коде

Сначала напишите простой API-эндпоинт с помощью /tdd (с некоторыми проблемами безопасности):

bash
/tdd

Попросите Claude Code создать API для входа пользователя, код будет примерно таким:

typescript
// src/api/login.ts
export async function loginUser(email: string, password: string) {
  const query = `SELECT * FROM users WHERE email = '${email}'`  // ❌ Риск SQL-инъекции
  const user = await db.query(query)
  
  if (user.password === password) {  // ❌ Сравнение пароля в открытом виде
    const token = generateToken(user.id)
    console.log('User logged in:', { email, password })  // ❌ Утечка пароля в логах
    return { token }
  }
}

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

Ожидаемый результат: файл с кодом создан.


Шаг 2: Запустите код-ревью

Теперь выполните команду /code-review:

bash
/code-review

Почему/code-review автоматически вызывает агента code-reviewer для проверки всех незакоммиченных изменений.

Ожидаемый результат: агент начинает анализировать код, затем выводит отчёт о ревью.


Шаг 3: Изучите отчёт о ревью

code-reviewer выведет отчёт примерно такого вида:

markdown
# Code Review Report

## Critical Issues (Fix Immediately)

### 1. [CRITICAL] Hardcoded credentials
**File:** src/api/login.ts:3
**Issue:** Password logging in console
**Fix:** Remove password from logs, only log user ID

```typescript
// ❌ Bad
console.log('User logged in:', { email, password })

// ✓ Good
console.log('User logged in:', { email, userId: user.id })

2. [CRITICAL] SQL injection vulnerability

File: src/api/login.ts:2 Issue: String concatenation in SQL query Fix: Use parameterized queries

typescript
// ❌ Bad
const query = `SELECT * FROM users WHERE email = '${email}'`

// ✓ Good
const { data } = await supabase
  .from('users')
  .select('*')
  .eq('email', email)

High Issues (Fix Before Production)

3. [HIGH] Plaintext password comparison

File: src/api/login.ts:4 Issue: Password stored in plaintext Fix: Use bcrypt to hash passwords

typescript
// ❌ Bad
if (user.password === password) {

// ✓ Good
import bcrypt from 'bcrypt'
const isValid = await bcrypt.compare(password, user.password)

Recommendations

  1. Add input validation for email format
  2. Add rate limiting to prevent brute force attacks
  3. Use JWT tokens instead of generating custom tokens

Approval Status

❌ BLOCKED - 2 CRITICAL issues found

Please fix all CRITICAL and HIGH issues before committing.


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

**Ожидаемый результат**: понятный отчёт о ревью с указанием всех проблем и рекомендаций по исправлению.

---

### Шаг 4: Исправьте проблемы

Исправьте код согласно отчёту:

```typescript
// src/api/login.ts
import bcrypt from 'bcrypt'
import { z } from 'zod'

const LoginSchema = z.object({
  email: z.string().email(),
  password: z.string().min(8)
})

export async function loginUser(input: unknown) {
  // Валидация ввода
  const validated = LoginSchema.parse(input)
  
  // Параметризованный запрос (защита от SQL-инъекций)
  const { data: user } = await supabase
    .from('users')
    .select('*')
    .eq('email', validated.email)
    .single()
  
  if (!user) {
    throw new Error('Invalid credentials')
  }
  
  // Сравнение хешированных паролей
  const isValid = await bcrypt.compare(validated.password, user.password_hash)
  
  if (isValid) {
    const token = generateToken(user.id)
    console.log('User logged in:', { email: validated.email, userId: user.id })
    return { token }
  }
  
  throw new Error('Invalid credentials')
}

Почему Исправлены все проблемы CRITICAL и HIGH, добавлена валидация ввода и сравнение хешированных паролей.

Ожидаемый результат: код обновлён, уязвимости безопасности устранены.


Шаг 5: Повторное ревью

Снова запустите /code-review:

bash
/code-review

Почему Проверяем, что все проблемы исправлены и код готов к коммиту.

Ожидаемый результат: отчёт об успешном прохождении примерно такого вида:

markdown
# Code Review Report

## Summary

- **Critical Issues:** 0 ✓
- **High Issues:** 0 ✓
- **Medium Issues:** 1 ⚠️
- **Low Issues:** 1 💡

## Medium Issues (Fix When Possible)

### 1. [MEDIUM] Missing JSDoc for public API
**File:** src/api/login.ts:9
**Issue:** loginUser function missing documentation
**Fix:** Add JSDoc comments

```typescript
/**
 * Authenticates a user with email and password
 * @param input - Login credentials (email, password)
 * @returns Object with JWT token
 * @throws Error if credentials invalid
 */
export async function loginUser(input: unknown) {

Low Issues (Consider Fixing)

2. [LOW] Add rate limiting

File: src/api/login.ts:9 Issue: Login endpoint lacks rate limiting Fix: Add express-rate-limit middleware

typescript
import rateLimit from 'express-rate-limit'

const loginLimiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minutes
  max: 5 // 5 attempts per window
})

app.post('/api/login', loginLimiter, loginUser)

Approval Status

✅ APPROVED - No CRITICAL or HIGH issues

Note: Medium and Low issues can be fixed in follow-up commits.


**Ожидаемый результат**: ревью пройдено, код готов к коммиту.

---

### Шаг 6: Специализированный аудит безопасности (опционально)

Если ваш код связан с API-эндпоинтами, аутентификацией, платежами или другими чувствительными функциями, можно отдельно вызвать security-reviewer:

```bash
/security-reviewer

Почему security-reviewer проводит более глубокий анализ по OWASP Top 10, проверяя больше паттернов уязвимостей.

Ожидаемый результат: детальный отчёт о безопасности, включающий анализ OWASP, проверку уязвимостей зависимостей, рекомендации по инструментам безопасности и др.


Контрольная точка ✅

После выполнения вышеуказанных шагов вы должны:

  • ✅ Уметь запускать команду /code-review
  • ✅ Понимать структуру и содержание отчёта о ревью
  • ✅ Уметь исправлять проблемы кода на основе отчёта
  • ✅ Знать, что проблемы CRITICAL и HIGH обязательно нужно исправить
  • ✅ Понимать разницу между code-reviewer и security-reviewer
  • ✅ Выработать привычку проводить ревью перед коммитом

Типичные ошибки

Ошибка 1: Пропуск код-ревью

Проблема: Считаете код простым и коммитите напрямую, не запуская ревью.

Последствия: Можно пропустить уязвимости безопасности, получить отказ от CI/CD или вызвать инцидент в продакшене.

Правильный подход: Выработайте привычку запускать /code-review перед каждым коммитом.


Ошибка 2: Игнорирование проблем MEDIUM

Проблема: Видите проблемы MEDIUM и не обращаете на них внимания, они накапливаются.

Последствия: Качество кода снижается, технический долг растёт, поддержка становится сложнее.

Правильный подход: Хотя проблемы MEDIUM не блокируют коммит, их следует исправлять в разумные сроки.


Ошибка 3: Ручное исправление SQL-инъекций

Проблема: Пишете собственное экранирование строк вместо использования параметризованных запросов.

Последствия: Экранирование может быть неполным, риск SQL-инъекции сохраняется.

Правильный подход: Всегда используйте ORM или параметризованные запросы, не собирайте SQL вручную.


Ошибка 4: Путаница между двумя reviewer'ами

Проблема: Для всего кода запускаете только code-reviewer, игнорируя security-reviewer.

Последствия: Уязвимости безопасности могут быть пропущены, особенно в коде, связанном с API, аутентификацией, платежами.

Правильный подход:

  • Обычный код: code-reviewer достаточно
  • Код, связанный с безопасностью: обязательно запускайте также security-reviewer

Итоги урока

Процесс код-ревью — одна из ключевых функций Everything Claude Code:

ФункцияАгентЧто проверяетСерьёзность
Ревью качества кодаcode-reviewerРазмер функций, обработка ошибок, лучшие практикиHIGH/MEDIUM/LOW
Аудит безопасностиsecurity-reviewerOWASP Top 10, утечка секретов, уязвимости инъекцийCRITICAL/HIGH/MEDIUM

Ключевые выводы:

  1. Перед каждым коммитом запускайте /code-review
  2. Проблемы CRITICAL/HIGH обязательно исправляйте перед коммитом
  3. Код, связанный с безопасностью, обязательно проверяйте через security-reviewer
  4. Отчёт о ревью содержит точное местоположение и рекомендации по исправлению
  5. Выработайте привычку: ревью → исправление → повторное ревью → коммит

Анонс следующего урока

В следующем уроке мы изучим Автоматизация с Hooks.

Вы узнаете:

  • Что такое Hooks и как автоматизировать процесс разработки
  • Как использовать 15+ автоматических хуков
  • Как настроить Hooks под потребности проекта
  • Сценарии применения SessionStart, SessionEnd, PreToolUse и других хуков

Приложение: справка по исходному коду

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

Дата обновления: 2026-01-25

ФункцияПуть к файлуНомер строки
---------
---------
---------
---------

Ключевые константы:

  • Лимит размера функции: 50 строк (code-reviewer.md:47)
  • Лимит размера файла: 800 строк (code-reviewer.md:48)
  • Лимит глубины вложенности: 4 уровня (code-reviewer.md:49)

Ключевые функции:

  • /code-review: вызывает агента code-reviewer для ревью качества кода
  • /security-reviewer: вызывает агента security-reviewer для аудита безопасности
  • git diff --name-only HEAD: получает список незакоммиченных изменённых файлов (code-review.md:5)

Критерии одобрения (code-reviewer.md:90-92):

  • ✅ Approve: No CRITICAL or HIGH issues
  • ⚠️ Warning: MEDIUM issues only (can merge with caution)
  • ❌ Block: CRITICAL or HIGH issues found