Интересует такой вопрос,
есть на Python какие-либо модули для экранирования sql спецсимволов, для защиты от sql инъекций?
или всётаки, самому написать придётся?))
slav0nicспасибо.
скорей прийдётся ещё раз перечитать документация, это делается автоматически, если указывать параметры sql запроса как параметры ф-ции execute(), а не формировать запрос через string formating
conn=MySQLdb.connect(host="localhost",user="root",passwd="*****",db="_MyDb")
curs=conn.cursor()
curs.execute("set AUTOCOMMIT=1")
curs.execute("select id from content_table where section='"+section+"'")
4funпосмотри пример:
PS: если я всё правильно понял то здесь всё отлично с точки зрения безопасности?
>>> import MySQLdb
>>> conn = MySQLdb.connect(db="mydb", user="root", host="localhost")
>>> c1 = conn.cursor()
>>> c1.execute("select %(s1)s",{'s1':'1; select 2;'})
1L
>>> c1.fetchone()
('1; select 2;',)
>>> c1.execute("select %(s1)s"%{'s1':'1; select 2;'})
1L
>>> c1.fetchone()
(1L,)
curs=conn.cursor()
curs.execute("set AUTOCOMMIT=1")
curs.execute("select id from content_table where section=%(s1)s",{'s1':'section'})
# Never do this -- insecure!
symbol = 'IBM'
c.execute("... where symbol = '%s'" % symbol)
# Do this instead
t = (symbol,)
c.execute('select * from stocks where symbol=?', t)
# Larger example
for t in [('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
('2006-04-06', 'SELL', 'IBM', 500, 53.00),
]:
c.execute('insert into stocks values (?,?,?,?,?)', t)
igor.kaistвот так вот вообще неработает + это пример по sqllite, может быть всё таки есть какието различия в модулях?
Смотрим доки :)# Do this instead
t = (symbol,)
c.execute('select * from stocks where symbol=?', t)
curs=conn.cursor()
curs.execute("set AUTOCOMMIT=1")
curs.execute("select id from content_table where section=%s",section)