LINUX.ORG.RU

Защита от SQL-injection.


0

1

Пишу скрипт на Python:

def p(s):
  s = string.replace(s,"\\'","_") # injection protect
  s = string.replace(s,"'","\\'")
  return s

cur.execute ('''INSERT INTO test 
(id,name) VALUES
(%s,'%s')''' % (id,p(name))
Может ли этот код пропустить SQL-injection через переменную name?

★★★★★
Ответ на: комментарий от urxvt

Если это pg, то там необходимо не подставлять параметры с помощью %, а передавать в tuple вторым аргументом. И тогда да, будет экранирование.

vladimir-vg ★★
()
Ответ на: комментарий от pacify

Откуда у вас такие сведения? Что такое MySQL Python API? API бывают разные. Имеется в виду MySQLdb или что-то еще?

В любом случае, в соответствии с PEP249, параметры (т.е. данные) передаются вторым аргументом, отдельно от самого запроса. Форматирование строк не используется.

Читайте документацию, пожалуйста. Стыдно должно быть запускать такой код.

shylent
()
Ответ на: комментарий от shylent

> В любом случае, в соответствии с PEP249, параметры (т.е. данные)

передаются вторым аргументом, отдельно от самого запроса.


Спасибо. Ни разу такого кода не встречал.
PEPs не читаю, обычно смотрю примеры на русском (Google/Yandex).

pacify ★★★★★
() автор топика
Ответ на: комментарий от pacify

>Спасибо. Ни разу такого кода не встречал.

Какой ужас. Вроде даже в самых простых учебниках есть про особенности передачи параметров в db-api.

anonymous
()

Лучшая защита от SQL-injection - это воспользоваться средствами драйвера БД.

Вот такой псевдокод должен быть:


string sSQL = "SELECT E.id FROM emp E WHERE ? = E.name AND ? = E.job";

//...

Query q = conn.getQuery(sSQL);

q.addParam(1, "John Smith");
q.addParam(2, "SALESMAN");
ResulSet rs = q.execute();

while(rs.next())
  print(rs.getNumber());

как-то так.

gandjubas
()
Ответ на: комментарий от shylent

да, моя ошибка. помнил же что где-то там это есть, но перечитал и вроде не нашел как.

vene4ka
()
Ответ на: комментарий от Begemoth

> вот это и есть быдлокодерство.

Есть еще книги на русском, например - Р.Сузи, «Python» и Д.Бизли «Python. Справочник».

pacify ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.