lepffm / issuance

Blogging with Github Issues.
https://github.com/lepffm/issuance/issues
MIT License
1 stars 0 forks source link

SQL LIKE Query 의 보안 문제 회피하기 - TBD #181

Open lepffm opened 3 months ago

lepffm commented 3 months ago

intro

문제상황

문제가 되는 이유

회피하기

  1. LIKE 대신 position 함수 사용

    • 예시
      SELECT * FROM BIZ_TABLE
      WHERE position ( 'hell' in BIZ ) > 0
    • 장점 : 변환작업 불필요. SQL 만으로 처리가능
    • 단점 : SQL 가독성이 떨어짐 (LIKE 문이라고 생각이 안됨) , 대소문자를 무시할 수 없음
  2. 입력값 escaping 처리

    • 인자가 될 변수의 값을 escape 값으로 변환 \% , \_ , \\
    • 예시 SQL
      LIKE concat('%', regexp_replace( #{variable}, '([%_])', '\\\1','g'), '%')
      or
      LIKE concat('%', variable, '% escape '\') -- 이 떄도  variable 변수에 대한 escaping 은 필요함 

      java

      variable.replaceAll("([%_])","\\\\$1")
    • 장점 : 가장 일반적인 해결책, LIKE 절을 유지할 수 있다.
    • 단점 : 입력값을 SQL 또는 호출하는 측에서 명시적으로 변환 처리해주어야 한다.

reference