SQL 인젝션, 여전히 위험하다
pingulee조회 0 · 댓글 0
수십 년 된 취약점이지만 아직도 터진다. 원인은 항상 같다. 쿼리에 사용자 입력을 문자열로 이어붙이는 것.
# 위험
cur.execute(f"SELECT * FROM users WHERE id = '{uid}'")
# 안전 (파라미터 바인딩)
cur.execute("SELECT * FROM users WHERE id = %s", (uid,))방어
- 항상 파라미터 바인딩(prepared statement)
- ORM을 쓰되 raw 쿼리 조립을 경계
- DB 계정에 최소 권한만 부여해 피해 범위를 제한
블라인드 SQLi는 응답의 참/거짓 차이만으로도 데이터를 뽑아낸다. "티가 안 나니 안전"은 착각이다.
댓글 0
첫 댓글을 남겨보세요.