우선 Im과 데이터베이스에 꽤 새로운 어제 파이썬을 사용하기 시작했습니다.SQLite 입력을 살균 처리
나는 (내가 Perl로 DBI를 통해 이전이 일부 SQLite는 사용)에 sqlite3를 모듈로 주위를 연주하기 시작
나는 공식 파이썬 SQLite는 문서 here# Never do this -- insecure!
symbol = 'RHAT'
c.execute("SELECT * FROM stocks WHERE symbol = '%s'" % symbol)
# Do this instead
t = ('RHAT',)
c.execute('SELECT * FROM stocks WHERE symbol=?', t)
print c.fetchone()
에 다음의 예를 통해 발견
첫 번째 예제가 안전하지 않은 이유는 무엇입니까?
그냥 문서를 저장하는 응용 프로그램이 있고 사용자가 문서 이름으로 데이터베이스를 검색 할 수 있습니다. 이를 위해
는 S/i는 키워드 쿼리를 생성 한 후 사용자로부터 입력을 필요로 할 일을하는내가 튜플 지금보다 다음 문자열을 내가 모두에서 의미하는 "안전한"되어야하는 이유 얻을 해달라고 사용자는 "xyz OR 1 = 1"과 같은 것을 입력하여 모든 레코드를 표시 할 수 있습니다.
누군가 나를 친절하게 설명해주기를 바랍니다. 나는 이것이 아마도 경험이있는 누군가에게 매우 분명하다는 것을 안다.
터플이 처리되었으므로 비밀 소스가 있습니다. –
"두 경우 모두 사용자가"xyz OR 1 = 1 "과 같이 모든 레코드를 표시 할 수 있습니다"- 아니, 그게 전부입니다. 좋아하는 검색 엔진에서 "SQL injection"을 검색하십시오. 이것은 매우 광범위하게 다루어집니다. – Mat