繁体   English   中英

Python MySQLdb意外行为(?)

[英]Python MySQLdb unexpected behaviour (?)

我想确保无法进行SQL注入,但是我在使用此代码段时遇到了奇怪的行为。 我的用户输入在“字段”和“名称”中; 我还写了一个片段,只允许“ 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 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);

您是否尝试执行过“ cur.execute(sql,(field,name,))”?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM