Published on

당신의 웹사이트는 안전한가요? 기초적인 보안 체크포인트

Authors

웹사이트 보안은 선택이 아닌 필수입니다. 특히 고객 데이터를 다루는 비즈니스 사이트라면 더욱 그렇죠. 오늘은 꼭 확인해야 할 기본적인 보안 요소들을 알아보겠습니다.

🔒 HTTPS 설정

SSL/TLS 인증서 확인

# OpenSSL로 인증서 정보 확인
openssl s_client -connect yourdomain.com:443 -servername yourdomain.com

보안 헤더 설정

// Next.js에서 보안 헤더 설정
import { NextResponse } from 'next/server';

export function middleware(request: Request) {
    const response = NextResponse.next();
    
    // 보안 헤더 추가
    response.headers.set('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
    response.headers.set('X-Content-Type-Options', 'nosniff');
    response.headers.set('X-Frame-Options', 'DENY');
    response.headers.set('X-XSS-Protection', '1; mode=block');
    
    return response;
}

🛡 XSS 공격 방지

// 입력값 sanitize 함수
const sanitizeInput = (input: string): string => {
    return input
        .replace(/&/g, '&')
        .replace(/</g, '&lt;')
        .replace(/>/g, '&gt;')
        .replace(/"/g, '&quot;')
        .replace(/'/g, '&#x27;')
        .replace(/\//g, '&#x2F;');
};

🔑 안전한 비밀번호 관리

// 비밀번호 유효성 검사
interface IPasswordValidation {
    isValid: boolean;
    errors: string[];
}

const validatePassword = (password: string): IPasswordValidation => {
    const errors: string[] = [];
    
    if (password.length < 8) {
        errors.push('비밀번호는 8자 이상이어야 합니다');
    }
    if (!/[A-Z]/.test(password)) {
        errors.push('대문자를 포함해야 합니다');
    }
    if (!/[0-9]/.test(password)) {
        errors.push('숫자를 포함해야 합니다');
    }
    
    return {
        isValid: errors.length === 0,
        errors
    };
};

📱 API 보안

// JWT 토큰 검증 미들웨어
const validateToken = async (req: Request, res: Response, next: NextFunction) => {
    const token = req.headers.authorization?.split(' ')[1];
    
    if (!token) {
        return res.status(401).json({ error: '인증 토큰이 없습니다' });
    }
    
    try {
        const decoded = jwt.verify(token, process.env.JWT_SECRET!);
        req.user = decoded;
        next();
    } catch (error) {
        return res.status(401).json({ error: '유효하지 않은 토큰입니다' });
    }
};

🔍 보안 체크리스트

  1. HTTPS 적용
  2. 보안 헤더 설정
  3. 입력값 검증
  4. SQL 인젝션 방지
  5. CSRF 토큰 사용

💡 일반적인 공격 유형과 대응

  • XSS (Cross-Site Scripting)
  • CSRF (Cross-Site Request Forgery)
  • SQL Injection
  • DDoS 공격

🛠 보안 모니터링

// 로그인 시도 모니터링
const monitorLoginAttempts = (userId: string) => {
    const attempts = loginAttempts.get(userId) || 0;
    
    if (attempts >= 5) {
        // 계정 잠금
        lockAccount(userId);
        sendAlertEmail(userId);
    }
    
    loginAttempts.set(userId, attempts + 1);
};

🎯 정기적인 보안 점검 항목

  • 취약점 스캔
  • 로그 분석
  • 백업 확인
  • 접근 권한 검토

웹사이트 보안은 한 번 설정하고 끝나는 것이 아닙니다. 정기적인 점검과 업데이트가 필요한 지속적인 과정이라는 것을 잊지 마세요.