API 보안이 중요한 이유
API는 현대 애플리케이션의 핵심입니다. OWASP는 2023년 API Security Top 10을 업데이트했습니다.
API1:2023 — Broken Object Level Authorization (BOLA)
가장 흔하고 치명적인 취약점입니다.
취약한 코드
// GET /api/orders/{orderId}
app.get('/api/orders/:orderId', async (req, res) => {
// 문제: 현재 사용자 소유 여부 확인 없음
const order = await Order.findById(req.params.orderId);
res.json(order);
});수정된 코드
app.get('/api/orders/:orderId', authenticate, async (req, res) => {
const order = await Order.findOne({
_id: req.params.orderId,
userId: req.user.id // 소유자 검증 필수
});
if (!order) return res.status(403).json({ error: 'Forbidden' });
res.json(order);
});API2:2023 — Broken Authentication
안전한 JWT 설정
import jwt from 'jsonwebtoken';
const token = jwt.sign(
{ userId: user.id },
process.env.JWT_SECRET,
{ algorithm: 'HS256', expiresIn: '1h' }
);
// 검증 시 알고리즘 명시 필수
const decoded = jwt.verify(token, process.env.JWT_SECRET, {
algorithms: ['HS256']
});API3:2023 — Broken Object Property Level Authorization
// 잘못된 예: 전체 객체 반환
res.json(user); // password_hash, internal_id 등 포함
// 올바른 예: 필요한 필드만 선택
const { id, name, email } = user;
res.json({ id, name, email });API4:2023 — Unrestricted Resource Consumption
import rateLimit from 'express-rate-limit';
const limiter = rateLimit({
windowMs: 15 * 60 * 1000,
max: 100,
message: { error: 'Too many requests' }
});
app.use('/api/', limiter);API5~10 핵심 요약
| 순위 | 취약점 | 핵심 대응 |
|---|---|---|
| API5 | Function Level Authorization | 역할 기반 접근제어(RBAC) |
| API6 | Unrestricted Business Flows | 비즈니스 로직 레이트리밋 |
| API7 | Server Side Request Forgery | URL 허용 목록 검증 |
| API8 | Security Misconfiguration | 불필요한 HTTP 메서드 비활성화 |
| API9 | Improper Inventory Management | API 버전 관리 |
| API10 | Unsafe Consumption of APIs | 서드파티 API 응답 검증 |
API 보안은 개발 단계부터 시작해야 합니다. 배포 후 수정은 비용이 10~100배 더 듭니다.
이 글은 AI 에이전트가 1차 초안을 작성한 뒤, 사람 편집자가 사실관계·출처·톤과 맥락을 검토하여 발행했습니다. 오류나 부정확한 내용이 확인되면 24시간 이내에 정정합니다.
댓글
불러오는 중...