Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 23, 2011 11:39:06

andreiru
От:
Зарегистрирован: 2010-11-06
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Защита от sql инъекций MySQLdb

Здравствуйте!

Пытаюсь сделать простой запрос с защитой от sql инъекций:

cursor.execute(u'SELECT * FROM list WHERE type_id =?', (2,))
Возникает ошибка:
  File "/usr/local/lib/python2.6/dist-packages/cherrypy/_cprequest.py", line 645, in respond
response.body = self.handler()
File "/usr/local/lib/python2.6/dist-packages/cherrypy/lib/encoding.py", line 188, in __call__
self.body = self.oldhandler(*args, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/cherrypy/_cpdispatch.py", line 29, in __call__
return self.callable(*self.args, **self.kwargs)
File "/var/www/events/www.py", line 81, in index
cursor.execute(u'SELECT * FROM list WHERE type_id =?', (str(2),))
File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 151, in execute
query = query % db.literal(args)
TypeError: not all arguments converted during string formatting
Подскажите пожалуйста что не так делаю ?



Офлайн

#2 Авг. 23, 2011 11:51:41

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Защита от sql инъекций MySQLdb

andreiru
Подскажите пожалуйста что не так делаю ?
Плейсхолдер в запросе используете не верный.



Офлайн

#3 Авг. 23, 2011 11:57:53

andreiru
От:
Зарегистрирован: 2010-11-06
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Защита от sql инъекций MySQLdb

Александр Кошелев
andreiru
Подскажите пожалуйста что не так делаю ?
Плейсхолдер в запросе используете не верный.
Плейсхолдер - это знак вопроса (type_id =?) ?



Офлайн

#4 Авг. 23, 2011 12:47:52

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Защита от sql инъекций MySQLdb

andreiru
Плейсхолдер - это знак вопроса (type_id =?) ?
%s
http://mysql-python.sourceforge.net/MySQLdb.html#some-examples



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#5 Авг. 23, 2011 13:09:23

andreiru
От:
Зарегистрирован: 2010-11-06
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Защита от sql инъекций MySQLdb

PooH, спасибо!

Как быть если мне необходимо использовать LIKE %..% в запросе =>

sql = u'SELECT * FROM list WHERE name LIKE \%%s\%'
Выдаёт ошибку, пробовал экранировать, не помогает !?



Офлайн

#6 Авг. 24, 2011 11:52:00

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

Защита от sql инъекций MySQLdb

andreiru
Как быть если мне необходимо использовать LIKE %..% в запросе =>
sql = u'SELECT * FROM list WHERE name LIKE \%%s\%'
Выдаёт ошибку, пробовал экранировать, не помогает !?
Вообще заэкранировать процент %%, но вам это не поможет, потому как MySQLdb любезно заключит строковую переменную в кавычки. Действовать надо так
cursor.execute(u'SELECT * FROM list WHERE name LIKE %s', ('%%%s%%' % name,))



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

#7 Авг. 24, 2011 15:29:44

andreiru
От:
Зарегистрирован: 2010-11-06
Сообщения: 154
Репутация: +  0  -
Профиль   Отправить e-mail  

Защита от sql инъекций MySQLdb

PooH ясно, спасибо большое!



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version