Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[week5 tmi] SQL Injection 예방 기법 #38

Open
seoyeon0201 opened this issue Oct 19, 2023 · 0 comments
Open

[week5 tmi] SQL Injection 예방 기법 #38

seoyeon0201 opened this issue Oct 19, 2023 · 0 comments
Labels
documentation Improvements or additions to documentation

Comments

@seoyeon0201
Copy link
Contributor

TMI : 데이터베이스 쿼리에 변수를 안전하게 삽입하는 SQL 쿼리 방법

✔️ 해당 기법은 주로 SQL Injection 공격을 방지하기 위해 사용

1. Parameterized Query

✔️ 개념: 사용자 입력을 쿼리로 전송하는 것이 아니라 문자열 인수로 전달

✔️ 사용자가 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;
@seoyeon0201 seoyeon0201 added the documentation Improvements or additions to documentation label Oct 19, 2023
@seoyeon0201 seoyeon0201 changed the title [week3 tmi] SQL Injection 예방 기법 [week5 tmi] SQL Injection 예방 기법 Oct 19, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
Development

No branches or pull requests

1 participant