모처럼 약간 여유가 생겨서 웹코딩이나 좀 하고있는데
파이썬의 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에 해당하는 부분도 ?로 치환하면 에러가 나더라.'공부' 카테고리의 다른 글
NP, NP-COMPLETE, NP-HARD (7) | 2010.05.05 |
---|---|
for문에서 j (3) | 2010.04.26 |
SQL injection on python+SQLite3 (0) | 2010.04.02 |
Google Summer of Code2010 & CGAL (0) | 2010.03.30 |
O/R mapping (0) | 2010.02.26 |
Laplacian Pyramid on GPU (1) | 2010.01.13 |
댓글을 달아 주세요