Найти - Пользователи
Полная версия: Sql escape module?
Начало » Базы данных » Sql escape module?
1
4fun
Интересует такой вопрос,
есть на Python какие-либо модули для экранирования sql спецсимволов, для защиты от sql инъекций?
или всётаки, самому написать придётся?))
slav0nic
скорей прийдётся ещё раз перечитать документация, это делается автоматически, если указывать параметры sql запроса как параметры ф-ции execute(), а не формировать запрос через string formating
4fun
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: если я всё правильно понял то здесь всё отлично с точки зрения безопасности?
pythonwin
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,)
slav0nic
4fun
не, у тебя какраз строка собирается, смотри пример pythonwinа №1
4fun
тоесть у меня должно получиться вот такая запись?
curs=conn.cursor()
curs.execute("set AUTOCOMMIT=1")
curs.execute("select id from content_table where section=%(s1)s",{'s1':'section'})
igor.kaist
Смотрим доки :)
# 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)
4fun
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)
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB