/ Format interpolacji ciągów / Python psycopg2 vs% - python, psycopg2

Python psycopg2 format interpolacji ciągów znaków w stosunku do% - python, psycopg2

Zgodnie z dokumentacją psycopg2 (http://initd.org/psycopg/docs/connection.html) w Stanach:

Warning Never, never, NEVER use Python string concatenation (+) or string parameters interpolation (%) to pass variables to a SQL query string. Not even at gunpoint.

W ostrzeżeniu odnosi się konkretnie do nie robienia czegoś takiego:

cur.execute(SQL % data)

Czy to ostrzeżenie dotyczy również następujących przy użyciu formatu?

cur.execute(SQL.format(data))

Nie znam elementów wewnętrznych formatu, ale zakładam, że używa on% string interop pod spodem, co spowodowałoby, że jego użycie byłoby niewskazane

Odpowiedzi:

0 dla odpowiedzi № 1

SQL.format() (gdzie SQL jest zwykłym „ciągiem Pythona”, którego tak naprawdę nie używa % interpolacja pod maską, ale ma tę samą pułapkę: wartości, które zastępujesz, nie są poprawnie zastępowane przez SQL (jak to możliwe; Python nie ma pojęcia, że SQL jest instrukcją SQL), a twoja instrukcja SQL może zostać następnie poddana atakom iniekcyjnym.

Różne moduły SQL mają metody zapobiegające temu problemowi i należy ich użyć.


0 dla odpowiedzi nr 2

Tak. Metody interpolacji ciągów są delikatne, ponieważ umożliwiają atak typu SQL injection. Wykorzystanie zewnętrznych (podanych przez użytkownika) danych jako parametrów w sparametryzowanych zapytaniach (zamiast budowania ciągu zapytania) uniemożliwia tego rodzaju atak.