728x90
728x90
웹에서 SQL Injection을 방어하기 위해 가장 많이 알고 쓰이는 Parameter Binding 에 대해서 알아보자 ✔
// 취약한 코드
private final EntityManager em;
public List<Member> findByName(String name) {
String query = "select m from Member m where m.name = '" + name + "'";
return em.createQuery(query, Member.class).getResultList();
}
위 취약한 코드 name에
"admin' OR '1'='1" 가 들어가게 되면
String query = select m from Member m where m.name = 'admin' OR '1'='1'
해당 쿼리가 완성이 되는데 OR 연산자로 인해 모든 member의 정보가 조회가 되버린다.
그럼 안전한 Parameter Binding 코드를 보자 ✔
// 안전한 Parameter Binding 코드
private final EntityManager em;
public List<Member> findByName(String name) {
return em.createQuery("select m from Member m where m.name =:name", Member.class)
.setParameter("name", name)
.getResultList();
}
위 코드 name에
"admin' OR '1'='1" 가 들어가게 되면 어떻게 될까?
-> 위 코드에서는 setParameter 메소드로 바인딩 시에 ' (싱글쿼터)가 이스케이프 처리가 되므로 문자열로 써 입력되기 때문에 SQL Injection을 방어할 수 있게 된다.
👏
'개발 관련 부가 지식 > 기타' 카테고리의 다른 글
Eclipse(이클립스) ClassNotFoundException 해결 방안 (0) | 2023.04.05 |
---|---|
세션 하이재킹(Session Hijacking)에 대해서 (0) | 2023.04.03 |
Java Stack 구현 (0) | 2023.02.21 |
스프링 부트 동일 Apllication 여러 포트로 구동 with (인텔리제이) (0) | 2023.02.02 |
디자인패턴이란? (0) | 2023.01.22 |