aiwf 0.3.21 → 0.3.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -2
- package/src/cli/index.js +39 -336
- package/src/lib/installer.js +310 -90
- package/src/utils/messages.js +24 -0
- package/src/DEPENDENCY_MAP.md +0 -90
- package/src/cli/cache-cli.js +0 -459
- package/src/cli/checkpoint-cli.js +0 -417
- package/src/cli/language-cli.js +0 -286
- package/src/cli/sprint-cli.js +0 -287
- package/src/commands/ai-tool.js +0 -383
- package/src/commands/compress.js +0 -60
- package/src/commands/create-project.js +0 -160
- package/src/commands/evaluate.js +0 -459
- package/src/commands/persona.js +0 -309
- package/src/commands/sprint-task.js +0 -262
- package/src/commands/token.js +0 -312
- package/src/lib/ai-persona-manager.js +0 -711
- package/src/lib/cache-system.js +0 -332
- package/src/lib/context-engine.js +0 -568
- package/src/lib/github-integration.js +0 -402
- package/src/lib/memory-profiler.js +0 -471
- package/src/lib/metrics-collector.js +0 -885
- package/src/lib/offline-detector.js +0 -386
- package/src/lib/resource-loader-enhanced.js +0 -399
- package/src/lib/resource-loader.js +0 -250
- package/src/lib/resources/commands/ai-persona.js +0 -602
- package/src/lib/resources/commands/compress-context.js +0 -389
- package/src/lib/resources/commands/evaluate.js +0 -246
- package/src/lib/resources/commands/persona-context-apply.js +0 -562
- package/src/lib/resources/commands/token-tracking.js +0 -443
- package/src/lib/resources/config/commit-patterns.js +0 -103
- package/src/lib/resources/config/language.json +0 -6
- package/src/lib/resources/personas/PERSONA_INDEX.md +0 -57
- package/src/lib/resources/personas/analyst.json +0 -44
- package/src/lib/resources/personas/architect/best_practices.md +0 -136
- package/src/lib/resources/personas/architect/knowledge_base.md +0 -377
- package/src/lib/resources/personas/architect.json +0 -44
- package/src/lib/resources/personas/backend/best_practices.md +0 -766
- package/src/lib/resources/personas/backend/knowledge_base.md +0 -1070
- package/src/lib/resources/personas/data_analyst/best_practices.md +0 -594
- package/src/lib/resources/personas/data_analyst/knowledge_base.md +0 -1057
- package/src/lib/resources/personas/developer.json +0 -44
- package/src/lib/resources/personas/developer.md +0 -37
- package/src/lib/resources/personas/evaluation_criteria.json +0 -137
- package/src/lib/resources/personas/frontend/best_practices.md +0 -445
- package/src/lib/resources/personas/frontend/knowledge_base.md +0 -729
- package/src/lib/resources/personas/persona-index.json +0 -31
- package/src/lib/resources/personas/reviewer.json +0 -44
- package/src/lib/resources/personas/security/best_practices.md +0 -307
- package/src/lib/resources/personas/security/knowledge_base.md +0 -498
- package/src/lib/resources/personas/tester.json +0 -44
- package/src/lib/resources/templates/README.md +0 -78
- package/src/lib/resources/templates/api-server/config.json +0 -64
- package/src/lib/resources/templates/api-server/template/.aiwf/config.json +0 -56
- package/src/lib/resources/templates/api-server/template/.aiwf/feature-ledger.json +0 -42
- package/src/lib/resources/templates/api-server/template/.aiwf/personas/backend-engineer.json +0 -40
- package/src/lib/resources/templates/api-server/template/.aiwf/scripts/cli.js +0 -111
- package/src/lib/resources/templates/api-server/template/.env.example +0 -29
- package/src/lib/resources/templates/api-server/template/.eslintrc.json +0 -23
- package/src/lib/resources/templates/api-server/template/README.md +0 -171
- package/src/lib/resources/templates/api-server/template/jest.config.js +0 -26
- package/src/lib/resources/templates/api-server/template/nodemon.json +0 -9
- package/src/lib/resources/templates/api-server/template/package.json +0 -61
- package/src/lib/resources/templates/api-server/template/src/app.ts +0 -60
- package/src/lib/resources/templates/api-server/template/src/config/swagger.ts +0 -38
- package/src/lib/resources/templates/api-server/template/src/controllers/aiwfController.ts +0 -54
- package/src/lib/resources/templates/api-server/template/src/controllers/authController.ts +0 -128
- package/src/lib/resources/templates/api-server/template/src/controllers/statusController.ts +0 -28
- package/src/lib/resources/templates/api-server/template/src/index.ts +0 -28
- package/src/lib/resources/templates/api-server/template/src/middleware/aiwfMiddleware.ts +0 -50
- package/src/lib/resources/templates/api-server/template/src/middleware/authMiddleware.ts +0 -41
- package/src/lib/resources/templates/api-server/template/src/middleware/errorHandler.ts +0 -42
- package/src/lib/resources/templates/api-server/template/src/middleware/notFoundHandler.ts +0 -14
- package/src/lib/resources/templates/api-server/template/src/middleware/requestLogger.ts +0 -20
- package/src/lib/resources/templates/api-server/template/src/routes/aiwf.ts +0 -31
- package/src/lib/resources/templates/api-server/template/src/routes/index.ts +0 -13
- package/src/lib/resources/templates/api-server/template/src/routes/v1/index.ts +0 -67
- package/src/lib/resources/templates/api-server/template/src/utils/logger.ts +0 -37
- package/src/lib/resources/templates/api-server/template/tests/app.test.ts +0 -40
- package/src/lib/resources/templates/api-server/template/tsconfig.json +0 -43
- package/src/lib/resources/templates/npm-library/config.json +0 -61
- package/src/lib/resources/templates/npm-library/template/LICENSE +0 -21
- package/src/lib/resources/templates/npm-library/template/README.md +0 -201
- package/src/lib/resources/templates/npm-library/template/package.json +0 -78
- package/src/lib/resources/templates/web-app/config.json +0 -53
- package/src/lib/resources/templates/web-app/template/.aiwf/config.json +0 -54
- package/src/lib/resources/templates/web-app/template/.aiwf/feature-ledger.json +0 -37
- package/src/lib/resources/templates/web-app/template/.aiwf/personas/fullstack-developer.json +0 -40
- package/src/lib/resources/templates/web-app/template/.aiwf/scripts/cli.js +0 -110
- package/src/lib/resources/templates/web-app/template/.eslintrc.cjs +0 -20
- package/src/lib/resources/templates/web-app/template/README.md +0 -151
- package/src/lib/resources/templates/web-app/template/index.html +0 -14
- package/src/lib/resources/templates/web-app/template/package.json +0 -44
- package/src/lib/resources/templates/web-app/template/postcss.config.js +0 -6
- package/src/lib/resources/templates/web-app/template/public/vite.svg +0 -1
- package/src/lib/resources/templates/web-app/template/src/App.tsx +0 -21
- package/src/lib/resources/templates/web-app/template/src/components/Layout.tsx +0 -57
- package/src/lib/resources/templates/web-app/template/src/components/aiwf/ContextStatus.tsx +0 -107
- package/src/lib/resources/templates/web-app/template/src/components/aiwf/TokenUsage.tsx +0 -71
- package/src/lib/resources/templates/web-app/template/src/index.css +0 -60
- package/src/lib/resources/templates/web-app/template/src/main.tsx +0 -10
- package/src/lib/resources/templates/web-app/template/src/pages/AiwfDashboard.tsx +0 -57
- package/src/lib/resources/templates/web-app/template/src/pages/HomePage.tsx +0 -89
- package/src/lib/resources/templates/web-app/template/src/pages/NotFound.tsx +0 -25
- package/src/lib/resources/templates/web-app/template/src/stores/aiwfStore.ts +0 -126
- package/src/lib/resources/templates/web-app/template/src/types/global.d.ts +0 -9
- package/src/lib/resources/templates/web-app/template/src/vite-env.d.ts +0 -1
- package/src/lib/resources/templates/web-app/template/tailwind.config.js +0 -30
- package/src/lib/resources/templates/web-app/template/tsconfig.json +0 -37
- package/src/lib/resources/templates/web-app/template/tsconfig.node.json +0 -10
- package/src/lib/resources/templates/web-app/template/vite.config.ts +0 -23
- package/src/lib/resources/utils/background-monitor.js +0 -223
- package/src/lib/resources/utils/compression-metrics.js +0 -1031
- package/src/lib/resources/utils/compression-strategies.js +0 -557
- package/src/lib/resources/utils/content-normalizer.js +0 -455
- package/src/lib/resources/utils/context-compressor.js +0 -583
- package/src/lib/resources/utils/context-rule-parser.js +0 -180
- package/src/lib/resources/utils/context-token-monitor.js +0 -463
- package/src/lib/resources/utils/context-update-manager.js +0 -502
- package/src/lib/resources/utils/git-utils.js +0 -220
- package/src/lib/resources/utils/importance-classifier.js +0 -645
- package/src/lib/resources/utils/information-filter.js +0 -710
- package/src/lib/resources/utils/persona-aware-compressor.js +0 -598
- package/src/lib/resources/utils/prompt-injector.js +0 -242
- package/src/lib/resources/utils/simplified-evaluator.js +0 -119
- package/src/lib/resources/utils/text-summarizer.js +0 -492
- package/src/lib/resources/utils/token-counter.js +0 -177
- package/src/lib/resources/utils/token-monitor.js +0 -484
- package/src/lib/resources/utils/token-reporter.js +0 -452
- package/src/lib/resources/utils/token-storage.js +0 -433
- package/src/lib/resources/utils/token-tracker.js +0 -283
- package/src/lib/state/priority-calculator.js +0 -217
- package/src/lib/state/state-index.js +0 -155
- package/src/lib/state/task-scanner.js +0 -328
- package/src/lib/task-analyzer.js +0 -599
- package/src/lib/template-cache-system.js +0 -559
- package/src/lib/template-downloader.js +0 -467
- package/src/lib/template-version-manager.js +0 -491
- package/src/lib/token-optimizer.js +0 -517
- package/src/utils/engineering-guard.js +0 -399
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"personas": [
|
|
3
|
-
{
|
|
4
|
-
"id": "analyst",
|
|
5
|
-
"name": "System Analyst",
|
|
6
|
-
"file": "analyst.json"
|
|
7
|
-
},
|
|
8
|
-
{
|
|
9
|
-
"id": "architect",
|
|
10
|
-
"name": "System Architect",
|
|
11
|
-
"file": "architect.json"
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
"id": "developer",
|
|
15
|
-
"name": "Software Developer",
|
|
16
|
-
"file": "developer.json"
|
|
17
|
-
},
|
|
18
|
-
{
|
|
19
|
-
"id": "reviewer",
|
|
20
|
-
"name": "Code Reviewer",
|
|
21
|
-
"file": "reviewer.json"
|
|
22
|
-
},
|
|
23
|
-
{
|
|
24
|
-
"id": "tester",
|
|
25
|
-
"name": "Quality Assurance Engineer",
|
|
26
|
-
"file": "tester.json"
|
|
27
|
-
}
|
|
28
|
-
],
|
|
29
|
-
"total_personas": 5,
|
|
30
|
-
"last_updated": "2025-01-08T17:00:00Z"
|
|
31
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"id": "reviewer",
|
|
3
|
-
"name": "Code Reviewer",
|
|
4
|
-
"description": "Reviews code for quality, security, and adherence to standards",
|
|
5
|
-
"focus_areas": [
|
|
6
|
-
"Code quality assessment",
|
|
7
|
-
"Security vulnerability detection",
|
|
8
|
-
"Performance analysis",
|
|
9
|
-
"Best practices compliance",
|
|
10
|
-
"Documentation completeness"
|
|
11
|
-
],
|
|
12
|
-
"communication_style": {
|
|
13
|
-
"tone": "constructive, detailed, educational",
|
|
14
|
-
"language": "technical with specific examples",
|
|
15
|
-
"format": "review comments, suggestions, approval criteria"
|
|
16
|
-
},
|
|
17
|
-
"capabilities": [
|
|
18
|
-
"Identify code smells and anti-patterns",
|
|
19
|
-
"Detect security vulnerabilities",
|
|
20
|
-
"Suggest performance improvements",
|
|
21
|
-
"Ensure coding standards compliance",
|
|
22
|
-
"Verify test coverage"
|
|
23
|
-
],
|
|
24
|
-
"tools_and_methods": [
|
|
25
|
-
"Static code analysis",
|
|
26
|
-
"Security scanning",
|
|
27
|
-
"Performance profiling",
|
|
28
|
-
"Code coverage analysis",
|
|
29
|
-
"Dependency checking"
|
|
30
|
-
],
|
|
31
|
-
"output_formats": [
|
|
32
|
-
"Code review comments",
|
|
33
|
-
"Security audit reports",
|
|
34
|
-
"Performance analysis",
|
|
35
|
-
"Improvement suggestions",
|
|
36
|
-
"Approval decisions"
|
|
37
|
-
],
|
|
38
|
-
"example_prompts": [
|
|
39
|
-
"Review the authentication module for security issues",
|
|
40
|
-
"Check the payment service for performance bottlenecks",
|
|
41
|
-
"Verify test coverage for feature FL-001",
|
|
42
|
-
"Review the API design for REST best practices"
|
|
43
|
-
]
|
|
44
|
-
}
|
|
@@ -1,307 +0,0 @@
|
|
|
1
|
-
# Security 페르소나 Best Practices
|
|
2
|
-
|
|
3
|
-
## 개요
|
|
4
|
-
Security 페르소나는 애플리케이션의 보안을 최우선으로 고려합니다. 취약점 예방, 데이터 보호, 접근 제어에 중점을 둡니다.
|
|
5
|
-
|
|
6
|
-
## 핵심 보안 원칙
|
|
7
|
-
|
|
8
|
-
### 1. Defense in Depth (심층 방어)
|
|
9
|
-
- 다층적 보안 계층 구축
|
|
10
|
-
- 단일 실패 지점(SPOF) 제거
|
|
11
|
-
- 각 계층별 독립적 보안 메커니즘
|
|
12
|
-
|
|
13
|
-
### 2. Principle of Least Privilege
|
|
14
|
-
```javascript
|
|
15
|
-
// 최소 권한 원칙 적용
|
|
16
|
-
class UserPermissions {
|
|
17
|
-
constructor(userId) {
|
|
18
|
-
this.permissions = this.loadMinimalPermissions(userId);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
grantTemporaryAccess(resource, duration) {
|
|
22
|
-
// 임시 권한만 부여
|
|
23
|
-
const expiry = Date.now() + duration;
|
|
24
|
-
this.permissions.temporary[resource] = expiry;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
### 3. Zero Trust Architecture
|
|
30
|
-
- "절대 신뢰하지 말고 항상 검증하라"
|
|
31
|
-
- 모든 요청에 대한 인증/인가
|
|
32
|
-
- 네트워크 위치에 관계없이 동일한 보안 적용
|
|
33
|
-
|
|
34
|
-
## 보안 코딩 가이드
|
|
35
|
-
|
|
36
|
-
### 입력 검증 (Input Validation)
|
|
37
|
-
```javascript
|
|
38
|
-
class InputValidator {
|
|
39
|
-
// 화이트리스트 방식 검증
|
|
40
|
-
static validateEmail(email) {
|
|
41
|
-
const emailRegex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
|
|
42
|
-
if (!emailRegex.test(email)) {
|
|
43
|
-
throw new ValidationError('Invalid email format');
|
|
44
|
-
}
|
|
45
|
-
return email.toLowerCase().trim();
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// SQL Injection 방지
|
|
49
|
-
static sanitizeForSQL(input) {
|
|
50
|
-
// 파라미터화된 쿼리 사용 권장
|
|
51
|
-
return input.replace(/['";\\]/g, '');
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
// XSS 방지
|
|
55
|
-
static sanitizeHTML(input) {
|
|
56
|
-
const map = {
|
|
57
|
-
'&': '&',
|
|
58
|
-
'<': '<',
|
|
59
|
-
'>': '>',
|
|
60
|
-
'"': '"',
|
|
61
|
-
"'": ''',
|
|
62
|
-
'/': '/'
|
|
63
|
-
};
|
|
64
|
-
return input.replace(/[&<>"'/]/g, m => map[m]);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
### 인증 및 세션 관리
|
|
70
|
-
```javascript
|
|
71
|
-
class SecureSessionManager {
|
|
72
|
-
// 안전한 세션 생성
|
|
73
|
-
createSession(userId) {
|
|
74
|
-
const session = {
|
|
75
|
-
id: crypto.randomBytes(32).toString('hex'),
|
|
76
|
-
userId,
|
|
77
|
-
createdAt: Date.now(),
|
|
78
|
-
lastActivity: Date.now(),
|
|
79
|
-
ipAddress: getClientIP(),
|
|
80
|
-
userAgent: getUserAgent()
|
|
81
|
-
};
|
|
82
|
-
|
|
83
|
-
// 세션 고정 공격 방지
|
|
84
|
-
this.regenerateSessionId(session);
|
|
85
|
-
|
|
86
|
-
return session;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// 세션 유효성 검사
|
|
90
|
-
validateSession(sessionId) {
|
|
91
|
-
const session = this.getSession(sessionId);
|
|
92
|
-
|
|
93
|
-
// 세션 타임아웃 확인
|
|
94
|
-
if (Date.now() - session.lastActivity > SESSION_TIMEOUT) {
|
|
95
|
-
this.destroySession(sessionId);
|
|
96
|
-
throw new SecurityError('Session expired');
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// IP 주소 변경 감지
|
|
100
|
-
if (session.ipAddress !== getClientIP()) {
|
|
101
|
-
this.flagSuspiciousActivity(session);
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
return session;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
### 암호화 및 해싱
|
|
110
|
-
```javascript
|
|
111
|
-
class CryptoService {
|
|
112
|
-
// 비밀번호 해싱 (bcrypt 사용)
|
|
113
|
-
async hashPassword(password) {
|
|
114
|
-
const saltRounds = 12;
|
|
115
|
-
return await bcrypt.hash(password, saltRounds);
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
// 민감한 데이터 암호화
|
|
119
|
-
encryptSensitiveData(data) {
|
|
120
|
-
const algorithm = 'aes-256-gcm';
|
|
121
|
-
const key = Buffer.from(process.env.ENCRYPTION_KEY, 'hex');
|
|
122
|
-
const iv = crypto.randomBytes(16);
|
|
123
|
-
|
|
124
|
-
const cipher = crypto.createCipheriv(algorithm, key, iv);
|
|
125
|
-
let encrypted = cipher.update(JSON.stringify(data), 'utf8', 'hex');
|
|
126
|
-
encrypted += cipher.final('hex');
|
|
127
|
-
|
|
128
|
-
const authTag = cipher.getAuthTag();
|
|
129
|
-
|
|
130
|
-
return {
|
|
131
|
-
encrypted,
|
|
132
|
-
iv: iv.toString('hex'),
|
|
133
|
-
authTag: authTag.toString('hex')
|
|
134
|
-
};
|
|
135
|
-
}
|
|
136
|
-
}
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
## 보안 체크리스트
|
|
140
|
-
|
|
141
|
-
### 애플리케이션 보안
|
|
142
|
-
- [ ] 모든 사용자 입력 검증
|
|
143
|
-
- [ ] 출력 인코딩 적용
|
|
144
|
-
- [ ] 파라미터화된 쿼리 사용
|
|
145
|
-
- [ ] 안전한 인증 메커니즘
|
|
146
|
-
- [ ] 세션 관리 보안
|
|
147
|
-
- [ ] HTTPS 강제 사용
|
|
148
|
-
- [ ] 보안 헤더 설정
|
|
149
|
-
|
|
150
|
-
### API 보안
|
|
151
|
-
```javascript
|
|
152
|
-
// 보안 헤더 미들웨어
|
|
153
|
-
app.use((req, res, next) => {
|
|
154
|
-
// XSS 방지
|
|
155
|
-
res.setHeader('X-XSS-Protection', '1; mode=block');
|
|
156
|
-
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
157
|
-
|
|
158
|
-
// Clickjacking 방지
|
|
159
|
-
res.setHeader('X-Frame-Options', 'DENY');
|
|
160
|
-
|
|
161
|
-
// HSTS
|
|
162
|
-
res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
|
|
163
|
-
|
|
164
|
-
// CSP
|
|
165
|
-
res.setHeader('Content-Security-Policy', "default-src 'self'");
|
|
166
|
-
|
|
167
|
-
next();
|
|
168
|
-
});
|
|
169
|
-
```
|
|
170
|
-
|
|
171
|
-
### 데이터 보안
|
|
172
|
-
- [ ] 저장 시 암호화 (Encryption at Rest)
|
|
173
|
-
- [ ] 전송 시 암호화 (Encryption in Transit)
|
|
174
|
-
- [ ] 개인정보 마스킹
|
|
175
|
-
- [ ] 안전한 백업 및 복구
|
|
176
|
-
- [ ] 데이터 보존 정책
|
|
177
|
-
|
|
178
|
-
## 취약점 방지
|
|
179
|
-
|
|
180
|
-
### OWASP Top 10 대응
|
|
181
|
-
1. **Injection**: 파라미터화된 쿼리, 입력 검증
|
|
182
|
-
2. **Broken Authentication**: MFA, 안전한 세션 관리
|
|
183
|
-
3. **Sensitive Data Exposure**: 암호화, HTTPS
|
|
184
|
-
4. **XML External Entities**: XML 파서 보안 설정
|
|
185
|
-
5. **Broken Access Control**: 권한 검증, RBAC
|
|
186
|
-
6. **Security Misconfiguration**: 보안 설정 자동화
|
|
187
|
-
7. **XSS**: 출력 인코딩, CSP
|
|
188
|
-
8. **Insecure Deserialization**: 입력 검증, 타입 체크
|
|
189
|
-
9. **Using Components with Known Vulnerabilities**: 의존성 관리
|
|
190
|
-
10. **Insufficient Logging**: 포괄적 로깅 및 모니터링
|
|
191
|
-
|
|
192
|
-
### Rate Limiting
|
|
193
|
-
```javascript
|
|
194
|
-
class RateLimiter {
|
|
195
|
-
constructor(windowMs, maxRequests) {
|
|
196
|
-
this.windowMs = windowMs;
|
|
197
|
-
this.maxRequests = maxRequests;
|
|
198
|
-
this.requests = new Map();
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
async checkLimit(identifier) {
|
|
202
|
-
const now = Date.now();
|
|
203
|
-
const windowStart = now - this.windowMs;
|
|
204
|
-
|
|
205
|
-
// 오래된 요청 정리
|
|
206
|
-
const requests = this.requests.get(identifier) || [];
|
|
207
|
-
const recentRequests = requests.filter(time => time > windowStart);
|
|
208
|
-
|
|
209
|
-
if (recentRequests.length >= this.maxRequests) {
|
|
210
|
-
throw new RateLimitError('Too many requests');
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
recentRequests.push(now);
|
|
214
|
-
this.requests.set(identifier, recentRequests);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
## 보안 테스팅
|
|
220
|
-
|
|
221
|
-
### 정적 분석 (SAST)
|
|
222
|
-
```bash
|
|
223
|
-
# 보안 취약점 스캔
|
|
224
|
-
npm audit
|
|
225
|
-
snyk test
|
|
226
|
-
|
|
227
|
-
# 코드 분석
|
|
228
|
-
eslint --plugin security
|
|
229
|
-
```
|
|
230
|
-
|
|
231
|
-
### 동적 분석 (DAST)
|
|
232
|
-
- OWASP ZAP
|
|
233
|
-
- Burp Suite
|
|
234
|
-
- SQL Map
|
|
235
|
-
|
|
236
|
-
### 침투 테스트 체크리스트
|
|
237
|
-
- [ ] 인증 우회 시도
|
|
238
|
-
- [ ] 권한 상승 테스트
|
|
239
|
-
- [ ] SQL Injection 테스트
|
|
240
|
-
- [ ] XSS 테스트
|
|
241
|
-
- [ ] CSRF 테스트
|
|
242
|
-
- [ ] 파일 업로드 취약점
|
|
243
|
-
- [ ] API 엔드포인트 테스트
|
|
244
|
-
|
|
245
|
-
## 사고 대응 (Incident Response)
|
|
246
|
-
|
|
247
|
-
### 대응 절차
|
|
248
|
-
1. **탐지**: 이상 행동 모니터링
|
|
249
|
-
2. **분석**: 영향 범위 파악
|
|
250
|
-
3. **격리**: 피해 확산 방지
|
|
251
|
-
4. **제거**: 위협 요소 제거
|
|
252
|
-
5. **복구**: 정상 서비스 복원
|
|
253
|
-
6. **사후 분석**: 재발 방지 대책
|
|
254
|
-
|
|
255
|
-
### 로깅 및 모니터링
|
|
256
|
-
```javascript
|
|
257
|
-
class SecurityLogger {
|
|
258
|
-
logSecurityEvent(event) {
|
|
259
|
-
const log = {
|
|
260
|
-
timestamp: new Date().toISOString(),
|
|
261
|
-
eventType: event.type,
|
|
262
|
-
severity: event.severity,
|
|
263
|
-
userId: event.userId,
|
|
264
|
-
ipAddress: event.ipAddress,
|
|
265
|
-
userAgent: event.userAgent,
|
|
266
|
-
details: event.details,
|
|
267
|
-
stackTrace: event.error?.stack
|
|
268
|
-
};
|
|
269
|
-
|
|
270
|
-
// 중요 이벤트는 즉시 알림
|
|
271
|
-
if (event.severity === 'CRITICAL') {
|
|
272
|
-
this.alertSecurityTeam(log);
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
// 모든 보안 이벤트 기록
|
|
276
|
-
this.writeToSecurityLog(log);
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
## 컴플라이언스
|
|
282
|
-
|
|
283
|
-
### GDPR 준수
|
|
284
|
-
- 개인정보 처리 동의
|
|
285
|
-
- 데이터 이동권
|
|
286
|
-
- 잊혀질 권리
|
|
287
|
-
- 데이터 최소화
|
|
288
|
-
|
|
289
|
-
### PCI DSS 준수
|
|
290
|
-
- 카드 데이터 암호화
|
|
291
|
-
- 접근 제어
|
|
292
|
-
- 정기적인 보안 테스트
|
|
293
|
-
- 보안 정책 문서화
|
|
294
|
-
|
|
295
|
-
## 보안 도구
|
|
296
|
-
|
|
297
|
-
### 필수 도구
|
|
298
|
-
- **SAST**: SonarQube, Checkmarx
|
|
299
|
-
- **DAST**: OWASP ZAP, Acunetix
|
|
300
|
-
- **의존성 스캔**: Snyk, npm audit
|
|
301
|
-
- **시크릿 스캔**: GitGuardian, TruffleHog
|
|
302
|
-
- **WAF**: ModSecurity, Cloudflare
|
|
303
|
-
|
|
304
|
-
### 모니터링 도구
|
|
305
|
-
- **SIEM**: Splunk, ELK Stack
|
|
306
|
-
- **IDS/IPS**: Snort, Suricata
|
|
307
|
-
- **취약점 스캐너**: Nessus, OpenVAS
|