Как протестировать SQL-инъекцию Bobby Tables в Python?

#python #sql #python-3.x #sqlite

#python #sql #python-3.x #sqlite

Вопрос:

Я пытаюсь протестировать SQL-инъекцию из этой картинки в Python 3.x: введите описание изображения здесь

Источник: https://xkcd.com/327 /

Этот пример SQL-инъекции упоминается на странице документации библиотеки Python SQLite3 https://docs.python.org/3/library/sqlite3.html . Я попытался протестировать это в коде Python, но получил предупреждение: «sqlite3.Предупреждение: вы можете выполнять только один оператор одновременно. » Они уже исправили эту уязвимость? Я делаю что-то не так?

Фрагмент кода:

 import sqlite3

conn = sqlite3.connect('example.db')
c = conn.cursor()

c.execute('''CREATE TABLE test(firstname text, lastname text)''')
c.execute("INSERT INTO test VALUES ('John','Doe')")

firstname = "John'; DROP TABLE test;"
c.execute("SELECT * FROM test WHERE firstname = '%s'" % firstname)
for i in c:
    print(i)

conn.commit()
conn.close()
 

Результат:

 Traceback (most recent call last):
  File "C:test.py", line 10, in <module>
    c.execute("SELECT * FROM test WHERE firstname = '%s'" % firstname)
sqlite3.Warning: You can only execute one statement at a time.
 

Комментарии:

1. Скорее похоже, что вы это исправили. Используя функцию, которая допускает только один оператор. Попробуйте executescript .

2. docs.python.org/3/library/…

3. Но на странице документации библиотеки Python SQLite3 они используют функцию execute в этом примере.

Ответ №1:

c.execute(…) допускает только один оператор. Используйте c.executescript(…) или c.executemany(…).

Комментарии:

1. Спасибо за ответ, но на странице документации библиотеки Python SQLite3 они используют функцию execute в этом примере.