我想确保SQL注入是不可能的,但我在这个代码片段中遇到了奇怪的行为。我的用户输入在"field“和”name“中;我还编写了一个代码片段,只允许"field”的有效值,从而防止注入,但应该有更好的方法吗?
此外,第一个查询返回预期的结果,第二个查询返回(('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 dataDB-scheme:
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);发布于 2016-10-24 06:50:15
您是否尝试过执行"cur.execute(sql,(field,name,) )“?
https://stackoverflow.com/questions/40208117
复制相似问题