티스토리 뷰

Security/보안 취약점

SQL Injection

0bliviat3 2025. 3. 17. 20:18

SQL 삽입은 응용프로그램의 입력 필드를 통해 SQL 쿼리를 조작, DB에 비정상적인 엑세스를 수행하거나 정보를 탈취하는 취약점으로 입력값을 SQL 쿼리에 직접 삽입하지 않고, PreparedStatement 또는 ORM을 사용해 안전히 처리 한다.

 

 

가령 다음과 같이 로그인처리 하는 소스가 있다고 가정하면

public boolean unsafeLogin(String id, String password) {    
    String sql = "SELECT * FROM users WHERE id = '" + id +
            "' AND password = '" + password + "'";

    ... // 쿼리 실행
}

 

 

유효한 id' --

 

같은 입력만 넣어줘도 password 체크하는 where절은 주석처리 되어 그냥 로그인 처리될것이다.

 

대책은 JPA ORM을 사용해 안전한 처리가 가능하다.

즉, SQL을 직접 작성하지 않고 레이어를 따라 객체중심으로 데이터 처리함으로 SQL Injection을 방지한다. (자동으로 파라미터 바인딩)

public boolean safeLogin(String username, String password) {
    return userRepository.findByUsernameAndPassword(username, password).isPresent();
}

'Security > 보안 취약점' 카테고리의 다른 글

HTTP응답 분할  (0) 2025.03.23
CSRF  (0) 2025.03.20
경로 조작  (0) 2025.03.19
Template Injection (feat. XSS)  (0) 2025.03.18
보안 아키텍처  (0) 2025.03.17
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함