feat: 보안 강화 + 자동화 도구 3종 추가 (웹 크롤러·PPT·엑셀)
- lib/security.ts: escapeHtml, isValidEmail, sanitizeStr, checkRateLimit 유틸 추가 - next.config.ts: 보안 헤더 적용 (X-Frame-Options, HSTS, Permissions-Policy 등) - api/contact: XSS 방어, Rate Limit(5/min), 입력 길이 제한 - api/payment/confirm: 사용자 인증·소유권 검증, 타입 체크, 에러 메시지 정제 - api/admin/quotes: PUT 허용 필드 화이트리스트 적용 - api/saju/analyze: 로그인·결제 검증, 입력 크기 제한, gender 값 검증 - public/downloads/web_scraper_v1.0.py: requests+BS4+openpyxl 웹 크롤러 - public/downloads/ppt_automation_v1.0.py: python-pptx+openpyxl PPT 자동화 - app/services/automation/tools/scraper: 크롤러 상세 페이지 추가 - app/services/automation/tools/ppt: PPT 도구 상세 페이지 추가 - app/services/automation/page.tsx: scraper ready=true, email→PPT 교체 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -25,9 +25,9 @@ const tools = [
|
||||
{
|
||||
id: 'scraper',
|
||||
title: '웹 스크래핑 도구',
|
||||
subtitle: 'Web Scraper v0.9 (베타)',
|
||||
subtitle: 'Web Scraper v1.0',
|
||||
desc: '공공데이터·쇼핑몰 가격·뉴스를 자동 수집해 엑셀로 저장하는 Python 기반 수집 도구.',
|
||||
tags: ['Python', 'BeautifulSoup', 'Excel 출력'],
|
||||
tags: ['Python', 'BeautifulSoup', 'Excel 출력', '무료'],
|
||||
color: '#2563eb',
|
||||
bgColor: '#eff6ff',
|
||||
borderColor: '#bfdbfe',
|
||||
@@ -37,24 +37,24 @@ const tools = [
|
||||
</svg>
|
||||
),
|
||||
href: '/services/automation/tools/scraper',
|
||||
ready: false,
|
||||
ready: true,
|
||||
},
|
||||
{
|
||||
id: 'email',
|
||||
title: '이메일 자동 발송 도구',
|
||||
subtitle: 'Email Scheduler (준비중)',
|
||||
desc: '조건 설정 후 일정 시간에 자동으로 이메일을 발송. 엑셀 수신자 목록 연동 지원.',
|
||||
tags: ['Python', 'SMTP', '스케줄링'],
|
||||
id: 'ppt',
|
||||
title: 'PPT 제작 자동화 도구',
|
||||
subtitle: 'PPT Automation v1.0',
|
||||
desc: '엑셀 데이터를 읽어 표지·내용·마무리 슬라이드를 자동 생성하는 Python 기반 PPT 도구.',
|
||||
tags: ['Python', 'python-pptx', 'openpyxl', '무료'],
|
||||
color: '#7c3aed',
|
||||
bgColor: '#f5f3ff',
|
||||
borderColor: '#ddd6fe',
|
||||
icon: (
|
||||
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth={1.5} className="w-7 h-7">
|
||||
<path strokeLinecap="round" strokeLinejoin="round" d="M21.75 6.75v10.5a2.25 2.25 0 01-2.25 2.25h-15a2.25 2.25 0 01-2.25-2.25V6.75m19.5 0A2.25 2.25 0 0019.5 4.5h-15a2.25 2.25 0 00-2.25 2.25m19.5 0v.243a2.25 2.25 0 01-1.07 1.916l-7.5 4.615a2.25 2.25 0 01-2.36 0L3.32 8.91a2.25 2.25 0 01-1.07-1.916V6.75" />
|
||||
<path strokeLinecap="round" strokeLinejoin="round" d="M3.75 3v11.25A2.25 2.25 0 006 16.5h2.25M3.75 3h-1.5m1.5 0h16.5m0 0h1.5m-1.5 0v11.25A2.25 2.25 0 0118 16.5h-2.25m-7.5 0h7.5m-7.5 0l-1 3m8.5-3l1 3m0 0l.5 1.5m-.5-1.5h-9.5m0 0l-.5 1.5M9 11.25v1.5M12 9v3.75m3-6v6" />
|
||||
</svg>
|
||||
),
|
||||
href: '/services/automation/tools/email',
|
||||
ready: false,
|
||||
href: '/services/automation/tools/ppt',
|
||||
ready: true,
|
||||
},
|
||||
];
|
||||
|
||||
|
||||
Reference in New Issue
Block a user