보안을 모르는 개발자가 만든 서비스는 언제든 해킹의 표적이 됩니다.
OWASP에서 발표하는 Top 10 취약점을 기준으로, 개발자라면 반드시 이해해야 할 7가지를 정리했습니다.
1. SQL 인젝션
사용자 입력을 SQL 쿼리에 직접 삽입하면 공격자가 임의의 쿼리를 실행할 수 있습니다.
방어: Prepared Statement(파라미터화 쿼리) 사용이 유일한 해답입니다.
2. XSS (Cross-Site Scripting)
게시판 같은 곳에 악성 스크립트를 삽입해 다른 사용자의 브라우저에서 실행시킵니다.
방어: 사용자 입력을 HTML로 렌더링할 때 반드시 이스케이프 처리, CSP 헤더 설정.
3. CSRF (Cross-Site Request Forgery)
로그인된 사용자가 악성 사이트를 방문했을 때, 그 사이트가 사용자 권한으로 요청을 보냅니다.
방어: CSRF Token 발급 및 검증, SameSite 쿠키 설정.
4. 인증/세션 취약점
- 약한 비밀번호 정책
- 세션 토큰을 URL에 노출
- 로그아웃 후 세션 미파기
방어: bcrypt 해싱, HTTP-only 쿠키, 세션 만료 시간 설정.
5. IDOR (Broken Object Level Authorization)
/api/orders/1234 에서 1234를 1235로 바꿨을 때 다른 사람의 주문이 보이는 취약점입니다.
방어: 모든 API 요청에서 현재 로그인 사용자의 자원인지 반드시 서버에서 검증해야 합니다.
6. 민감 데이터 노출
- 에러 메시지에 DB 구조 노출
- HTTP로 비밀번호 전송
- 로그에 카드번호 기록
방어: HTTPS 강제, 에러 핸들링 표준화, 로그 마스킹.
7. 보안 헤더 미설정
HTTP 응답 헤더에 보안 관련 설정을 하지 않으면 클릭재킹, MIME 스니핑 등의 공격에 노출됩니다.
최소한 다음 헤더를 설정하세요.
X-Frame-Options: DENYX-Content-Type-Options: nosniffStrict-Transport-Security: max-age=31536000
보안은 기능 개발 후에 추가하는 것이 아니라, 처음부터 함께 설계해야 합니다.
작성한 정보가 조금이나마 유익하고 도움이 되셨다면, 가시기 전에 아래 광고 한번 살짝 눌러주시면 정말 큰 힘이 됩니다. 감사합니다!