---
description:
globs:
alwaysApply: true
---

# 보안 가이드

## 인증 및 인가

### JWT 기반 인증
현재 시스템은 JWT 토큰 기반 인증을 사용합니다:

```typescript
// 토큰 생성 (로그인 시)
const token = jwt.sign(
  { userId, companyCode, role },
  process.env.JWT_SECRET,
  { expiresIn: process.env.JWT_EXPIRES_IN || '24h' }
);

// 토큰 검증 (미들웨어)
const decoded = jwt.verify(token, process.env.JWT_SECRET);
req.user = decoded;
```

### 권한 관리 구조
- **auth_group**: 권한 그룹 정의
- **menu_auth_group**: 메뉴별 권한 그룹 매핑
- **user_auth**: 사용자별 권한 할당

### 인증 미들웨어
`backend-node/src/middleware/authMiddleware.ts` 참조

## 데이터 보안

### SQL 인젝션 방지
**올바른 방법** - 파라미터 바인딩 사용:
```typescript
const result = await pool.query(
  'SELECT * FROM user_info WHERE user_id = $1',
  [userId]
);
```

**위험한 방법** - 직접 문자열 삽입:
```typescript
const result = await pool.query(
  `SELECT * FROM user_info WHERE user_id = '${userId}'`
);
```

### 패스워드 보안
```typescript
import bcrypt from 'bcryptjs';

// 해싱
const hashedPassword = await bcrypt.hash(plainPassword, 10);

// 검증
const isValid = await bcrypt.compare(plainPassword, hashedPassword);
```

### 입력값 검증
```typescript
import Joi from 'joi';

const schema = Joi.object({
  userId: Joi.string().required().max(50),
  email: Joi.string().email().required(),
});

const { error, value } = schema.validate(req.body);
if (error) {
  return res.status(400).json({ success: false, message: error.message });
}
```

## 보안 미들웨어

### Helmet (보안 헤더)
```typescript
import helmet from 'helmet';
app.use(helmet());
```

### Rate Limiting
```typescript
import rateLimit from 'express-rate-limit';
const limiter = rateLimit({
  windowMs: 15 * 60 * 1000,
  max: 100,
});
app.use('/api/', limiter);
```

### CORS 설정
```typescript
import cors from 'cors';
app.use(cors({
  origin: process.env.CORS_ORIGIN,
  credentials: true,
}));
```

## 보안 체크리스트

### 코드 레벨
- [ ] SQL 인젝션 방지 ($1 파라미터 바인딩 사용)
- [ ] XSS 방지 (React 자동 이스케이프 활용)
- [ ] 입력값 검증 (Joi 스키마)
- [ ] 패스워드 bcrypt 해싱
- [ ] JWT 토큰 만료 설정

### 설정 레벨
- [ ] Helmet 보안 헤더
- [ ] Rate Limiting 적용
- [ ] CORS 적절한 설정
- [ ] HTTPS 사용 (운영 환경)
- [ ] 환경 변수로 시크릿 관리

### 운영 레벨
- [ ] winston 로깅 모니터링
- [ ] 권한 정기 검토
- [ ] 패스워드 정책 적용
- [ ] 백업 데이터 암호화
