~/pingulee

SQL 인젝션, 여전히 위험하다

pingulee조회 0 · 댓글 0

SQL 인젝션, 여전히 위험하다

수십 년 된 취약점이지만 아직도 터진다. 원인은 항상 같다. 쿼리에 사용자 입력을 문자열로 이어붙이는 것.

# 위험
cur.execute(f"SELECT * FROM users WHERE id = '{uid}'")
# 안전 (파라미터 바인딩)
cur.execute("SELECT * FROM users WHERE id = %s", (uid,))

방어

  1. 항상 파라미터 바인딩(prepared statement)
  2. ORM을 쓰되 raw 쿼리 조립을 경계
  3. DB 계정에 최소 권한만 부여해 피해 범위를 제한

블라인드 SQLi는 응답의 참/거짓 차이만으로도 데이터를 뽑아낸다. "티가 안 나니 안전"은 착각이다.

댓글 0

첫 댓글을 남겨보세요.