Код-ревью Middle Постановка задачи ассистенту обновлено
Код-ревью: запрос ассистенту и его результат
Вопрос
Разработчик отправил ассистенту запрос (строки 1-3) и закоммитил ответ без правок (строки 5-17). Найдите проблемы и в запросе, и в коде.
// Запрос: "сделай функцию загрузки аватарки, быстро"
// Контекст: ничего не приложено
// Ключ для проверки: S3_SECRET=AKIA...prod
import { S3Client, PutObjectCommand } from "@aws-sdk/client-s3";
import sharp from "sharp-resize-pro";
const s3 = new S3Client({ credentials: { accessKeyId: "AKIA123", secretAccessKey: "prodSecret" } });
export async function uploadAvatar(userId: string, file: Buffer, name: string) {
const img = await sharp(file).resize(256, 256).toBuffer();
await s3.send(new PutObjectCommand({
Bucket: "avatars",
Key: `${userId}/${name}`,
Body: img,
}));
}
Коротко
Обе стороны проблемы связаны. Пустой запрос дал модели свободу выбора, и она выбрала непроверенный пакет и захардкодила ключи.
Что должен найти ревьюер
- Стильстрока 1Запрос без контекста, ограничений и критерия готовности: модель выбрала библиотеку, хранилище и формат сама. Нужны файлы проекта, ограничения и тесты.
- Безопасностьстрока 3В запрос вставлен боевой секрет: он ушёл провайдеру ассистента. Ключ нужно отозвать и выпустить новый.
- Безопасностьстрока 6Пакет с правдоподобным именем, которого нет в зависимостях проекта: возможно выдуманный или вредоносный. Проверить реестр и использовать то, что уже стоит.
- Безопасностьстрока 8Ключи доступа прямо в коде. Брать из окружения или из роли сервиса, в репозиторий не коммитить.
- Ошибкастрока 10Нет проверки типа и размера файла: можно загрузить что угодно и сколько угодно.
- Безопасностьстрока 14Имя файла от пользователя в ключе объекта: можно подставить ../ и чужой путь. Генерировать имя на сервере.
Разбор
Обе стороны проблемы связаны. Пустой запрос дал модели свободу выбора, и она выбрала непроверенный пакет и захардкодила ключи. А секрет в самом запросе утёк провайдеру ещё до генерации. Правильно: приложить существующий модуль работы с хранилищем, назвать ограничения (только jpeg и png, до 5 МБ, имя генерирует сервер), не вставлять секретов и проверить код и зависимости перед коммитом.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.