5장 도구 오용과 매개변수 바꿔치기
도구 이름이 안전해 보여도 매개변수가 피해를 만든다. sendEmail은 수신자와 첨부, bookTrip은 금액과 취소 조건을 검증해야 한다. 모델이 만든 JSON을 곧바로 실행하지 않고 스키마, 허용 목록, 비즈니스 규칙을 차례로 적용한다.
const args = ToolArgsSchema.parse(rawArgs); // attachments 기본값 []
if (!allowedRecipients.has(args.to)) return deny('recipient');
if (args.attachments.some(isSensitive)) return requireApproval('attachment');
if (args.amount > budget.remaining) return deny('budget');
return allow();
검증되지 않은 경로는 거부한다. 주소는 표시명을 제거한 뒤 소문자화하고 to, cc, bcc를 모두 검사한다. 도메인은 부분 문자열이 아니라 정확히 비교한다. 유니코드 도메인은 punycode로 정규화하고 예상 밖의 문자는 승인 대기로 보낸다.
실습 5 변형 테스트
정상 수신자, 외부 수신자, 유사 철자 도메인, 숨은 참조, 과도한 첨부를 표로 만든다. 각각 허용·승인·거부 중 하나가 명확해야 한다.