首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python MySQLdb意外行为(?)

Python MySQLdb意外行为(?)
EN

Stack Overflow用户
提问于 2016-10-24 05:45:07
回答 1查看 30关注 0票数 0

我想确保SQL注入是不可能的,但我在这个代码片段中遇到了奇怪的行为。我的用户输入在"field“和”name“中;我还编写了一个代码片段,只允许"field”的有效值,从而防止注入,但应该有更好的方法吗?

此外,第一个查询返回预期的结果,第二个查询返回(('Beschreibung',),),第三个查询也按预期工作。为什么,我在#2中做错了什么?在python中有没有其他推荐的方法来防止SQL注入?

代码语言:javascript
复制
#!/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-scheme:

代码语言:javascript
复制
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);
EN

回答 1

Stack Overflow用户

发布于 2016-10-24 06:50:15

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40208117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档