Я заметил, что многие pythoni c заменяют функции, используемые до использования psycopg2 для вставки данных в базу данных. Я понимаю, что это сделано для того, чтобы пользователь не мог создавать искаженные sql запросы.
Пример: insert into users (name) values ('Hello''World');
, который будет хранить: Hello'World
в столбце.
Мой мыслительный процесс что они действительно делают это только перед вставкой, и мне неловко по этому поводу.
Пример:
s = "Hello'World"
q = "insert into users (name) values ('{}');".format(s.replace("'", "''"))
cursor.execute(q)
Мне это не нравится. Часть меня думает, что я все еще могу связываться с s
таким образом, чтобы обойти эту замену, поскольку это единственное, что останавливает инъекцию. Да, неправильно использовать psycopg2, потому что второй параметр - это список или набор значений, соответствующих записи в базе данных.
В нем должно быть указано:
cursor.execute("insert into users (name) values (%s);", ["Hello'World"])
Итак я пытаюсь найти подтверждение концепции, чтобы сделать sql инъекцию здесь, так как я не думаю, что двойные тики не годятся достаточно .
Так как это было python, я думаю о вариантах , но я не знаю, как работает postgres, если в строках используется какой-то препроцессор и т. д. c.
Есть ли способ передать строку, которая будет обработана как s '
без заменить прикосновение к нему? Я искал такие вещи, как попытка перейти в Unicode или что-то. Посмотрите, могу ли я что-нибудь сделать с юникодом или chr, чтобы заставить его работать по-другому?
Кто-нибудь еще сталкивался с этим? Я сижу в dbeaver и psycopg2 / python, чтобы посмотреть, смогу ли я заставить работать рабочий образец.