Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 15, 2009 22:49:10

4fun
От:
Зарегистрирован: 2008-08-25
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Sql escape module?

Интересует такой вопрос,
есть на Python какие-либо модули для экранирования sql спецсимволов, для защиты от sql инъекций?
или всётаки, самому написать придётся?))



Офлайн

#2 Янв. 16, 2009 01:10:57

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Sql escape module?

скорей прийдётся ещё раз перечитать документация, это делается автоматически, если указывать параметры sql запроса как параметры ф-ции execute(), а не формировать запрос через string formating

Офлайн

#3 Янв. 16, 2009 08:03:14

4fun
От:
Зарегистрирован: 2008-08-25
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Sql escape module?

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+"'")
PS: если я всё правильно понял то здесь всё отлично с точки зрения безопасности?



Офлайн

#4 Янв. 16, 2009 09:15:58

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

Sql escape module?

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,)



Офлайн

#5 Янв. 16, 2009 11:52:43

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2260
Репутация: +  41  -
Профиль   Отправить e-mail  

Sql escape module?

4fun
не, у тебя какраз строка собирается, смотри пример pythonwinа №1

Офлайн

#6 Янв. 16, 2009 16:03:45

4fun
От:
Зарегистрирован: 2008-08-25
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Sql escape module?

тоесть у меня должно получиться вот такая запись?

curs=conn.cursor()
curs.execute("set AUTOCOMMIT=1")
curs.execute("select id from content_table where section=%(s1)s",{'s1':'section'})



Офлайн

#7 Янв. 16, 2009 16:07:33

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

Sql escape module?

Смотрим доки :)

# 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)

Офлайн

#8 Янв. 16, 2009 16:32:00

4fun
От:
Зарегистрирован: 2008-08-25
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Sql escape module?

igor.kaist
Смотрим доки :)
# Do this instead
t = (symbol,)
c.execute('select * from stocks where symbol=?', t)
вот так вот вообще неработает + это пример по sqllite, может быть всё таки есть какието различия в модулях?

PS:Сделал вот так, всё работает, надеюсь на этот раз всё правильно?)
        curs=conn.cursor()
curs.execute("set AUTOCOMMIT=1")
curs.execute("select id from content_table where section=%s",section)



Отредактировано (Янв. 16, 2009 16:40:44)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version