개발자가 자주 하는 보안 실수와 방지 방법
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
보안
대상자
초보 개발자 및 중급 개발자 (실무 적용 중심, 난이도: 기초~중간)
핵심 요약
- 비밀 정보 누설 방지:
.env
파일 사용 및dotenv
라이브러리 활용 (.gitignore
추가) - 사용자 입력 검증 필수: SQL 주입/ XSS 방지 위해
prepared statements
및 템플릿 엔진 사용 - 비밀번호 안전 처리:
bcrypt
또는Argon2
해시 알고리즘 사용, salt 적용 필수 - 접근 제어 강화: Role-Based Access Control (RBAC) 구현, 서버 측 권한 검증 필수
- 의존성 업데이트 주기:
npm audit
/pip-audit
활용, 신뢰할 수 있는 패키지만 사용
섹션별 세부 요약
1. 비밀 정보 누설
- 코드 내 API 키/비밀번호 직접 입력 → GitHub 등 공개 저장소에 노출 위험
- 환경 변수 사용:
.env
파일 +dotenv
라이브러리로 관리 .gitignore
에.env
파일 추가, GitHub Actions 등 보안 저장소 활용
2. 사용자 입력 검증 누락
- SQL 주입/XSS 공격 가능성: 사용자 입력이 예상치 못한 데이터(예: JavaScript/SQL 코드) 포함 시
- 모든 입력 검증 및 정제 필수: 이메일/숫자 형식 검증,
prepared statements
사용 (SQL) - 템플릿 엔진 활용: HTML 자동 이스케이프 기능으로 XSS 방지
3. 약한 비밀번호 처리 방식
- 평문 저장 금지:
MD5
등 약한 해시 알고리즘 사용 시 해킹 위험 증가 - 보안 해시 알고리즘 적용:
bcrypt
또는Argon2
사용, salt 추가 필수 - 자체 인증 시스템 구현 금지: 신뢰할 수 있는 라이브러리(예:
passport.js
) 사용
4. 접근 제어 미흡
- 일반 사용자가 관리자 기능/다른 사용자 데이터 접근 가능 (예: 관리자 패널 유출)
- Role-Based Access Control (RBAC) 구현: 사용자 역할에 따른 권한 체크
- 서버 측 권한 검증 필수: 프론트엔드 기능 숨기는 것만으로는 충분하지 않음
5. 의존성 업데이트 무시
- 보안 취약점 포함된 라이브러리 사용 → 해킹 위험 증가
- 패키지 관리 도구 활용:
npm audit
/pip-audit
으로 취약점 확인 - 신뢰할 수 있는 소스만 사용: 장기간 업데이트 없는 패키지 사용 금지
결론
- 비밀 정보는 절대 코드에 직접 입력하지 말고
.env
+dotenv
사용 - 모든 사용자 입력에 대해 검증 및 정제 로직 적용 필수
- 비밀번호는
bcrypt
/Argon2
으로 해시 처리, salt 적용 - RBAC 구현 후 서버 측 권한 검증 강화
- 의존성 패키지 업데이트 주기적으로 확인,
npm audit
/pip-audit
활용