You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
✔️ 사용자가 DB Query 수행 권한을 가지지 않기에 SQL Injection 공격 예방 가능
ex)
Parameterized Query
public Item findOneByName(String name) {
return em.createQuery("select i from Item i where i.name = :name", Item.class)
.setParameter("name", name)
.getSingleResult();
}
2. Prepared Statement
✔️ 개념: 일반 MySQL statement와 달리 placeholder ?를 사용해서 문자열로 변환하여 parameter를 넘김
✔️ 장점
속도: 같은 형태의 value만 다른 반복적인 query의 경우 속도 빠름 / Query의 compile time을 아낄 수 있음
보안: SQL Injection에 대응 가능 / Query Template을 보내는 프로토콜과 Value를 보내는 프로토콜이 다름 / 하나를 변조해서 같은 SQL문 조작 불가능
✔️ 단점
하나의 Query를 단독으로 수행하는 경우, 두 번의 전송이 필요하기에 일반 Statement보다 느림
✔️ 일반 MySQL과 Prepared Statement
구분
Statement
Prepared Statement
Query문 파싱
매번
1번만
Protocol
Text Protocol
Binary Protocol
WARNING, ERROR
지원O
지원X
프로토콜 전송
1회
2회(최초), 1회(이후)
SQL Injection
노출
방어
ex)
일반 MySQL SELECT * FROM users WHERE username = 'bob' AND password = 'password';
Prepared Statement
PREPARE statement FROM 'SELECT * FROM users WHERE username = ? AND password = ?';
EXECUTE statement USING @username, @password;
The text was updated successfully, but these errors were encountered:
TMI : 데이터베이스 쿼리에 변수를 안전하게 삽입하는 SQL 쿼리 방법
✔️ 해당 기법은 주로 SQL Injection 공격을 방지하기 위해 사용
1. Parameterized Query
✔️ 개념: 사용자 입력을 쿼리로 전송하는 것이 아니라 문자열 인수로 전달
✔️ 사용자가 DB Query 수행 권한을 가지지 않기에 SQL Injection 공격 예방 가능
ex)
Parameterized Query
2. Prepared Statement
✔️ 개념: 일반 MySQL statement와 달리 placeholder
?
를 사용해서 문자열로 변환하여 parameter를 넘김✔️ 장점
속도: 같은 형태의 value만 다른 반복적인 query의 경우 속도 빠름 / Query의 compile time을 아낄 수 있음
보안: SQL Injection에 대응 가능 / Query Template을 보내는 프로토콜과 Value를 보내는 프로토콜이 다름 / 하나를 변조해서 같은 SQL문 조작 불가능
✔️ 단점
✔️ 일반 MySQL과 Prepared Statement
ex)
일반 MySQL
SELECT * FROM users WHERE username = 'bob' AND password = 'password';
Prepared Statement
The text was updated successfully, but these errors were encountered: