Django | Правильный способ передачи ключевых идентификаторов в строку запроса - PullRequest
0 голосов
/ 21 марта 2020

Я читал это Django do c: https://docs.djangoproject.com/en/3.0/topics/db/sql/#executing -custom- sql -прямо

В нем объясняется, как использовать параметры для предотвращения SQL - Инъекции и документация также имеют дело только с параметрами, которые в действительном sql могут стать одинарными кавычками.

Django простые экранирования с одинарными кавычками с помощью:

self.baz = "test"
cursor.execute("UPDATE bar SET foo = 1 WHERE baz = %s", [self.baz]) 

становится:

b"UPDATE bar SET foo = 1 WHERE baz = 'test'"

Это показывает, что мы не можем использовать аргумент param для ключевых идентификаторов, таких как имена таблиц:

cursor.execute("SELECT %s FROM %s", [column, table])

, так как одинарные кавычки недопустимы sql запрос (обратные метки будут действительными):

b"SELECT 'id' FROM 'atablename'"

Это означает, что мы можем просто передавать данные с форматированием строки, например:

cursor.execute(f"SELECT {} FROM {}".format(column, table))
cursor.execute("SELECT "+column+" FROM "+ table)

Таким образом, мы должны заботиться о sql -инъекциях.

Есть ли что-то, чего мне не хватает?

Как я могу избежать ключевых идентификаторов в Django, чтобы не было возможности sql -инъекции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...