보안 취약점 패턴 참조
CRITICAL 패턴
| 패턴 |
언어 |
예시 |
| SQL 인젝션 |
Java/PHP/Python |
"SELECT * FROM users WHERE id = " + userId |
| 하드코딩 패스워드 |
ALL |
password = "secret123" |
| 하드코딩 API 키 |
ALL |
API_KEY = "sk-..." |
| 원격 코드 실행 |
Python/PHP |
eval(user_input), exec($cmd) |
| OGNL 인젝션 |
Java |
Struts2 취약 패턴 |
HIGH 패턴
| 패턴 |
언어 |
설명 |
| XSS |
JS/PHP |
innerHTML = userInput, echo $input |
| CSRF 없음 |
Web |
form 태그에 토큰 없음 |
| 패스워드 평문 저장 |
ALL |
bcrypt/argon2 미사용 |
| SSL 검증 비활성화 |
Python |
verify=False |
| User Enumeration |
ALL |
로그인 실패 시 구체적 에러 |
MEDIUM 패턴
| 패턴 |
설명 |
| 취약한 암호화 |
MD5, SHA1 사용 |
| DEBUG 모드 활성화 |
프로덕션 DEBUG=True |
| 상세 에러 노출 |
스택트레이스 외부 노출 |
| 세션 관리 미흡 |
세션 고정, 짧은 만료 없음 |
개선 방안 템플릿
SQL 인젝션 수정 (Java)
// 취약
String sql = "SELECT * FROM users WHERE name = '" + name + "'";
// 안전
PreparedStatement ps = conn.prepareStatement("SELECT * FROM users WHERE name = ?");
ps.setString(1, name);
패스워드 해싱 (Python)
# 취약
if user.password == request.password:
# 안전
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"])
if pwd_context.verify(request.password, user.password):
XSS 방지 (JavaScript)
// 취약
element.innerHTML = userInput;
// 안전
element.textContent = userInput;
// 또는
element.innerHTML = DOMPurify.sanitize(userInput);