Форум сайта python.su
Интересует такой вопрос,
есть на Python какие-либо модули для экранирования sql спецсимволов, для защиты от sql инъекций?
или всётаки, самому написать придётся?))
Офлайн
скорей прийдётся ещё раз перечитать документация, это делается автоматически, если указывать параметры sql запроса как параметры ф-ции execute(), а не формировать запрос через string formating
Офлайн
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,)
Офлайн
4fun
не, у тебя какраз строка собирается, смотри пример pythonwinа №1
Офлайн
тоесть у меня должно получиться вот такая запись?
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)
Отредактировано (Янв. 16, 2009 16:11:05)
Офлайн
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)
Отредактировано (Янв. 16, 2009 16:40:44)
Офлайн