Альтернативы для Double Apostrophe для Postgresql запросов? - PullRequest
1 голос
/ 21 апреля 2020

Я заметил, что многие 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, чтобы посмотреть, смогу ли я заставить работать рабочий образец.

...