Files
telegram-bot-workers/test-rate-limit.sh
kappa 4eb5bbd3d3 feat(security): API 키 보호, CORS 강화, Rate Limiting KV 전환
보안 개선:
- API 키 하드코딩 제거 (NAMECHEAP_API_KEY_INTERNAL)
- CORS 정책: * → hosting.anvil.it.com 제한
- /health 엔드포인트 DB 정보 노출 방지
- Rate Limiting 인메모리 Map → Cloudflare KV 전환
  - 분산 환경 일관성 보장
  - 재시작 후에도 유지
  - 자동 만료 (TTL)

문서:
- CLAUDE.md Security 섹션 추가
- KV Namespace 설정 가이드 추가
- 배포/마이그레이션 가이드 추가

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-01-19 15:20:14 +09:00

78 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
# Rate Limit 테스트 스크립트
# Usage: ./test-rate-limit.sh [local|production]
set -e
# 환경 설정
ENV="${1:-local}"
if [ "$ENV" = "local" ]; then
URL="http://localhost:8787/webhook"
else
URL="https://telegram-summary-bot.kappa-d8e.workers.dev/webhook"
fi
# Webhook Secret (환경변수 또는 기본값)
TOKEN="${WEBHOOK_SECRET:-test-secret}"
echo "========================================="
echo "Rate Limit 테스트"
echo "환경: $ENV"
echo "URL: $URL"
echo "========================================="
echo ""
# 카운터
SUCCESS=0
RATE_LIMITED=0
# 35번 요청 (Rate Limit: 30/60초)
for i in {1..35}; do
echo -n "Request $i: "
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" -X POST "$URL" \
-H "Content-Type: application/json" \
-H "X-Telegram-Bot-Api-Secret-Token: $TOKEN" \
-d "{\"update_id\":$i,\"message\":{\"message_id\":$i,\"from\":{\"id\":123,\"is_bot\":false,\"first_name\":\"Test\"},\"chat\":{\"id\":123,\"type\":\"private\"},\"date\":$(date +%s),\"text\":\"테스트 $i\"}}")
if [ "$RESPONSE" = "200" ]; then
echo "✅ OK (HTTP 200)"
SUCCESS=$((SUCCESS + 1))
else
echo "❌ FAILED (HTTP $RESPONSE)"
fi
# 응답 본문 확인 (Rate Limit 메시지 검증)
BODY=$(curl -s -X POST "$URL" \
-H "Content-Type: application/json" \
-H "X-Telegram-Bot-Api-Secret-Token: $TOKEN" \
-d "{\"update_id\":$i,\"message\":{\"message_id\":$i,\"from\":{\"id\":123,\"is_bot\":false,\"first_name\":\"Test\"},\"chat\":{\"id\":123,\"type\":\"private\"},\"date\":$(date +%s),\"text\":\"테스트 $i\"}}")
if echo "$BODY" | grep -q "너무 많은 요청"; then
echo " └─ Rate Limit 메시지 감지"
RATE_LIMITED=$((RATE_LIMITED + 1))
fi
# 요청 간격 (0.2초)
sleep 0.2
done
echo ""
echo "========================================="
echo "결과 요약"
echo "========================================="
echo "총 요청: 35"
echo "성공: $SUCCESS"
echo "Rate Limited: $RATE_LIMITED"
echo ""
if [ $SUCCESS -ge 30 ] && [ $SUCCESS -le 32 ]; then
echo "✅ Rate Limiting이 정상적으로 동작합니다."
echo " (30-32개 요청 허용, 나머지 차단)"
exit 0
else
echo "❌ Rate Limiting이 예상과 다르게 동작합니다."
echo " (예상: 30-32개 허용, 실제: $SUCCESS개)"
exit 1
fi