2013-03-11 1 views
0

Я только узнал, что способ, которым я пользуюсь _mysql, вызывает серьезную проблему с SQL-инъекцией.Исправление SQL-инъекций с _mysql

Мой текущий код выглядит следующим образом:

db = _mysql.connect('', 'user', 'pass', 'db') 
query = """SELECT * FROM stuff WHERE thing="{0}" """.format(user_input) 
cur.query(query) 

Что я делаю неправильно и как я могу это исправить, так что это безопасно?

Я попытался использовать _mysql.escape_string(), но это все еще возвращает синтаксическую ошибку SQL.

+3

Ну ... Вам нужно воспитывать себя. Это похоже на приемлемый источник: . –

+0

* Уязвимость SQL Injection * не имеет ничего общего с синтаксическими ошибками. Просьба уточнить ваш точный вопрос. –

ответ

2

Вы можете использовать MySQLdb по себе:

conn = MySQLdb.connect(); 
curs = conn.cursor(); 
curs.execute("SELECT * FROM stuff WHERE thing = %s", (user_input)); 

Если вы хотите придерживаться _mysql, используйте db.escape_string(user_input).

Документация: http://mysql-python.sourceforge.net/MySQLdb.html

+0

Хорошо, я просто использую escape_string. – Max00355

+0

@ Max00355: вы действительно * должны * использовать 'MySQLdb' ... – SingleNegationElimination

+0

Я решил использовать MongoDB вместо этого. – Max00355

2

Хороший удобный справочник доступен через the bobby tables website.

Вы также можете найти значение в In this powerpoint reference, в котором приведены примеры внедрения sql, а также возможные способы устранения проблемы.

Смежные вопросы