簡體   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