본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 5. · 22 Views
Security 실무 활용 팁 가이드
웹 애플리케이션 개발 시 반드시 알아야 할 보안 실무 팁을 다룹니다. SQL Injection, XSS, CSRF 등 주요 보안 취약점을 방어하는 실전 코드를 제공합니다.
들어가며
이 글에서는 Security 실무 활용 팁 가이드에 대해 상세히 알아보겠습니다. 총 10가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
- SQL_Injection_방어
- XSS_방어_입력_검증
- CSRF_토큰_검증
- 비밀번호_안전하게_저장하기
- JWT_토큰_검증
- 환경변수로_민감정보_관리
- Rate_Limiting_구현
- HTTPS_사용_강제
- Content_Security_Policy_설정
- 입력값_길이_제한
1. SQL Injection 방어
개요
사용자 입력을 직접 SQL 쿼리에 넣지 않고, Parameterized Query를 사용하여 SQL Injection을 방지합니다.
코드 예제
// ❌ 위험한 방법
const query = `SELECT * FROM users WHERE id = ${userId}`;
// ✅ 안전한 방법 (Parameterized Query)
const query = 'SELECT * FROM users WHERE id = ?';
db.execute(query, [userId]);
설명
Parameterized Query를 사용하면 사용자 입력이 SQL 명령어로 해석되지 않아 SQL Injection 공격을 막을 수 있습니다.
2. XSS 방어 입력 검증
개요
사용자 입력을 그대로 HTML에 렌더링하면 XSS 공격에 취약합니다. 입력값을 이스케이프 처리하여 안전하게 만듭니다.
코드 예제
// ❌ 위험한 방법
element.innerHTML = userInput;
// ✅ 안전한 방법
const escapeHtml = (str) => {
return str.replace(/[&<>"']/g, (m) => ({
'&': '&', '<': '<', '>': '>',
'"': '"', "'": '''
}[m]));
};
element.textContent = escapeHtml(userInput);
설명
HTML 특수문자를 이스케이프 처리하거나 textContent를 사용하여 스크립트 실행을 방지합니다.
3. CSRF 토큰 검증
개요
CSRF 공격을 방지하기 위해 각 요청에 고유한 토큰을 포함시켜 검증합니다.
코드 예제
// 서버에서 CSRF 토큰 생성 및 검증
const csrfToken = crypto.randomBytes(32).toString('hex');
// 클라이언트 요청
fetch('/api/delete', {
method: 'POST',
headers: {
'X-CSRF-Token': csrfToken
},
body: JSON.stringify({ id: 123 })
});
설명
각 세션마다 고유한 CSRF 토큰을 생성하고, 서버에서 검증하여 외부 사이트에서의 요청을 차단합니다.
4. 비밀번호 안전하게 저장하기
개요
비밀번호를 평문으로 저장하면 안 됩니다. bcrypt 같은 해시 함수로 암호화하여 저장합니다.
코드 예제
const bcrypt = require('bcrypt');
// 회원가입 시
const hashedPassword = await bcrypt.hash(password, 10);
await db.insert({ email, password: hashedPassword });
// 로그인 시
const isValid = await bcrypt.compare(
inputPassword,
user.hashedPassword
);
설명
bcrypt는 솔트를 자동으로 생성하고 느린 해시 알고리즘으로 무차별 대입 공격을 어렵게 만듭니다.
5. JWT 토큰 검증
개요
JWT 토큰을 사용할 때는 반드시 서버에서 서명을 검증하고, 만료 시간을 확인해야 합니다.
코드 예제
const jwt = require('jsonwebtoken');
// 토큰 생성
const token = jwt.sign({ userId }, SECRET_KEY, {
expiresIn: '1h'
});
// 토큰 검증
const decoded = jwt.verify(token, SECRET_KEY);
if (decoded.exp < Date.now() / 1000) {
throw new Error('Token expired');
}
설명
JWT 토큰에 만료 시간을 설정하고, verify 메서드로 서명을 검증하여 위조된 토큰을 걸러냅니다.
6. 환경변수로 민감정보 관리
개요
API 키, 데이터베이스 비밀번호 등 민감한 정보는 코드에 직접 작성하지 않고 환경변수로 관리합니다.
코드 예제
// ❌ 위험한 방법
const apiKey = 'sk-1234567890abcdef';
// ✅ 안전한 방법
require('dotenv').config();
const apiKey = process.env.API_KEY;
// .env 파일 (gitignore에 추가)
// API_KEY=sk-1234567890abcdef
설명
환경변수를 사용하면 민감한 정보가 Git에 노출되지 않고, 배포 환경마다 다른 값을 사용할 수 있습니다.
7. Rate Limiting 구현
개요
무차별 대입 공격(Brute Force)을 방지하기 위해 API 요청 횟수를 제한합니다.
코드 예제
const rateLimit = require('express-rate-limit');
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15분
max: 100, // 최대 100회
message: '너무 많은 요청이 발생했습니다.'
});
app.use('/api/', limiter);
설명
일정 시간 동안 요청 횟수를 제한하여 무차별 대입 공격이나 DDoS 공격을 완화합니다.
8. HTTPS 사용 강제
개요
HTTP 요청을 자동으로 HTTPS로 리다이렉트하여 중간자 공격(MITM)을 방지합니다.
코드 예제
// Express.js에서 HTTPS 강제
app.use((req, res, next) => {
if (req.header('x-forwarded-proto') !== 'https') {
return res.redirect(
`https://${req.header('host')}${req.url}`
);
}
next();
});
설명
모든 통신을 암호화된 HTTPS로 강제하여 데이터가 평문으로 전송되는 것을 방지합니다.
9. Content Security Policy 설정
개요
CSP 헤더를 설정하여 허용된 소스에서만 스크립트를 실행하도록 제한합니다.
코드 예제
const helmet = require('helmet');
app.use(helmet.contentSecurityPolicy({
directives: {
defaultSrc: ["'self'"],
scriptSrc: ["'self'", "'unsafe-inline'"],
styleSrc: ["'self'", "https://fonts.googleapis.com"],
imgSrc: ["'self'", "data:", "https:"]
}
}));
설명
CSP를 설정하면 신뢰할 수 있는 출처의 리소스만 로드되어 XSS 공격을 추가로 방어할 수 있습니다.
10. 입력값 길이 제한
개요
사용자 입력의 최대 길이를 제한하여 버퍼 오버플로우나 DoS 공격을 방지합니다.
코드 예제
// Express.js body parser 설정
app.use(express.json({
limit: '10kb'
}));
// 입력 검증
if (username.length > 50) {
return res.status(400).json({
error: '사용자명은 50자를 초과할 수 없습니다.'
});
}
설명
입력값의 크기를 제한하면 대용량 데이터 전송을 통한 서버 부하 공격을 막을 수 있습니다.
마치며
이번 글에서는 Security 실무 활용 팁 가이드에 대해 알아보았습니다. 총 10가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#Security #XSS #SQL Injection #CSRF #Authentication
이 카드뉴스가 포함된 코스
댓글 (0)
함께 보면 좋은 카드 뉴스
Istio 보안 완벽 가이드
마이크로서비스 환경에서 필수적인 Istio 보안 기능을 실무 중심으로 설명합니다. mTLS부터 인증, 인가까지 단계별로 학습하여 안전한 서비스 메시를 구축할 수 있습니다.
서비스 메시 완벽 가이드
마이크로서비스 간 통신을 안전하고 효율적으로 관리하는 서비스 메시의 핵심 개념부터 실전 도입까지, 초급 개발자를 위한 완벽한 입문서입니다. Istio와 Linkerd 비교, 사이드카 패턴, 실무 적용 노하우를 담았습니다.
EFK 스택 로깅 완벽 가이드
마이크로서비스 환경에서 로그를 효과적으로 수집하고 분석하는 EFK 스택(Elasticsearch, Fluentd, Kibana)의 핵심 개념과 실전 활용법을 초급 개발자도 쉽게 이해할 수 있도록 정리한 가이드입니다.
Grafana 대시보드 완벽 가이드
실시간 모니터링의 핵심, Grafana 대시보드를 처음부터 끝까지 배워봅니다. Prometheus 연동부터 알람 설정까지, 초급 개발자도 쉽게 따라할 수 있는 실전 가이드입니다.
분산 추적 완벽 가이드
마이크로서비스 환경에서 요청의 전체 흐름을 추적하는 분산 추적 시스템의 핵심 개념을 배웁니다. Trace, Span, Trace ID 전파, 샘플링 전략까지 실무에 필요한 모든 것을 다룹니다.