모처럼 약간 여유가 생겨서 웹코딩이나 좀 하고있는데
파이썬의 SQLite3 기본 라이브러리가 쿼리문의 테이블 이름에 있어서는
SQL injection 공격에 대한 방어를 안해주는것 같다.
예를들면 코드에 SQL문을 사용할때 포맷스트링을 사용하면 엄청난 문제가 발생할 수 있는데
cursor.execute("INSERT INTO tablename VALUES (%s,%s)"%(value1,value2) )
이경우에 value1과 value2가 사용자에게 웹에서 받은 정보라고 해보면
value2가
"2); DROP TABLE tablename; 아무거나~~"
이라고 하면 임의로 데이터를 다 날려버릴 수도 있는거잖아?
그래서 정석대로 안전하게 하면
cursor.execute("INSERT INTO tablename VALUES (?,?)",(value1,value2) )
이렇게 하면 SQLite에서 안전하게 물음표를 value로 치환해주는데
cursor.execute("INSERT INTO? VALUES (?,?)",(value1,value2) )
이렇게
tablename에 해당하는 부분도 ?로 치환하면 에러가 나더라.
댓글을 달아 주세요