LEVEL 93 QUEST
보안 점검 자동화 - OWASP Top 10
보안 점검 자동화 - OWASP Top 10 — DevFoil 바이브코딩 Stage 19, Lv.93
OWASP Top 10이란?
웹 애플리케이션 보안 위협 TOP 10
OWASP(Open Web Application Security Project)는 웹 보안 커뮤니티에서
가장 흔하고 위험한 보안 취약점 10가지를 정리한 목록입니다.
이것만 방어해도 웹 공격의 대부분을 막을 수 있습니다.
| 순위 | 취약점 | 위험도 |
|---|---|---|
| 1 | 인젝션 (SQL, NoSQL, OS 명령어) | 매우 높음 |
| 2 | 인증 실패 (Broken Authentication) | 매우 높음 |
| 3 | 민감 데이터 노출 | 높음 |
| 4 | XML 외부 엔티티(XXE) | 중간 |
| 5 | 접근 제어 실패 | 높음 |
| 6 | 보안 설정 오류 | 높음 |
| 7 | XSS(크로스사이트 스크립팅) | 높음 |
| 8 | 안전하지 않은 역직렬화 | 중간 |
| 9 | 알려진 취약점 사용 | 높음 |
| 10 | 불충분한 로깅/모니터링 | 중간 |
SQL 인젝션 방어
가장 오래되었지만 여전히 가장 위험한 공격
SQL 인젝션은 사용자 입력에 SQL 코드를 삽입하여 DB를 조작하는 공격입니다.
공격자가
'; DROP TABLE users; -- 같은 입력을 넣으면 테이블이 삭제될 수 있습니다.
// 위험한 코드 (SQL 인젝션 취약)
const query = `SELECT * FROM users WHERE email = '${req.body.email}'`;
// 공격자 입력: ' OR '1'='1' --
// 결과: SELECT * FROM users WHERE email = '' OR '1'='1' --'
// 모든 사용자 데이터가 유출됨!
// 안전한 코드 1: 파라미터 바인딩
const result = await db.query(
'SELECT * FROM users WHERE email = $1',
[req.body.email] // 파라미터로 전달 = 자동 이스케이프
);
// 안전한 코드 2: ORM 사용 (Prisma)
const user = await prisma.user.findUnique({
where: { email: req.body.email } // ORM이 자동으로 안전하게 처리
});
// 안전한 코드 3: 입력값 검증 (zod)
import { z } from 'zod';
const loginSchema = z.object({
email: z.string().email(), // 이메일 형식만 허용
password: z.string().min(8).max(100) // 길이 제한
});
const validated = loginSchema.parse(req.body); // 형식 불일치 시 에러
🔒
여기까지는 미리보기입니다
보안 점검 자동화 - OWASP Top 10
무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.
Google로 3초 만에 시작 →🧵 Threads로 시작무료 공개 강의 둘러보기 (Lv.1~3)무료 가입하면 이어서 볼 수 있고, 강의를 완료할 때마다 XP와 레벨이 쌓입니다.