0
我想確保SQL注入是不可能的,但我遇到這個片段奇怪的行爲。我的用戶輸入是在「字段」和「名稱」中;我也寫了一個剪輯,只允許「字段」的有效值,從而防止注入,但應該有更好的方法?Python MySQLdb意外的行爲(?)
此外,第一個查詢返回預期結果,第二個返回(('Beschreibung',)),第三個也按預期工作。爲什麼是這樣,我在#2做錯了什麼?有沒有其他的,在Python中推薦的方式來防止SQL注入?
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import MySQLdb
db = MySQLdb.connect(db="cmdb", user="root", passwd="test", host="127.0.0.1")
cur=db.cursor()
field="Beschreibung"
name="testhost"
sql="SELECT %s FROM cmdb WHERE Name=\"%s\"" % (field, name,)
cur.execute(sql)
data=cur.fetchall()
print data
sql='SELECT %s FROM cmdb WHERE Name=%s'
cur.execute(sql, (field,name))
data=cur.fetchall()
print data
sql='SELECT * FROM cmdb WHERE Name=%s'
cur.execute(sql, (name,))
data=cur.fetchall()
print data
DB-方案:
CREATE TABLE cmdb (Name varchar(128),BSI varchar(128),Projekt varchar(128),Typ varchar(128),Beschreibung varchar(128),Betriebssystem varchar(128),Version varchar(128),Level varchar(128),Standort varchar(128),Status varchar(128),HE varchar(128),Position varchar(128),Seite varchar(128),Hersteller varchar(128),Modell varchar(128),CPU varchar(128),NrCPUs varchar(128),CoresjeCPU varchar(128),RAM varchar(128),Festplatten varchar(128),Besonderheiten varchar(128),IPWAN varchar(128),Teilnetz varchar(128),primaryIP varchar(128),weitereIPs varchar(128),NagiosGruppen varchar(128),Dependson varchar(128),Feed varchar(128),Updategruppe varchar(128),NRBuchhaltung varchar(128),IPMI varchar(128),Admin varchar(128),Eingebaut\nDurch varchar(128),Benutzer varchar(128),Notiz varchar(128),Haendler varchar(128)) ENGINE=InnoDB DEFAULT CHARSET=utf8;ALTER TABLE cmdb ADD UNIQUE KEY hostname (Name);
是的,這並沒有改變任何東西。 – Craig