#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 в этом примере.