AsIs
jest niebezpieczne, chyba że naprawdę wiesz, co robisz. Możesz go użyć na przykład do testów jednostkowych.
Przekazywanie parametrów nie jest tak niebezpieczne, o ile nie wstępnie sformatujesz zapytania sql. Nigdy nie rób:
sql_query = 'SELECT * FROM {}'.format(user_input)
cur.execute(sql_query)
Od user_input
może być ';DROP DATABASE;'
na przykład.
Zamiast tego wykonaj:
sql_query = 'SELECT * FROM %s'
cur.execute(sql_query, (user_input,))
pyscopg2
oczyści Twoje zapytanie. Możesz także wstępnie oczyścić parametry w swoim kodzie za pomocą własnej logiki, jeśli naprawdę nie ufasz danym wprowadzonym przez użytkownika.
Według psycopg2
dokumentacja
:
Ponadto nigdy, przenigdy nie pozwoliłbym moim użytkownikom powiedzieć mi, do której tabeli powinienem wykonać zapytanie. Logika Twojej aplikacji (lub trasy) powinna Ci to powiedzieć.
Odnośnie AsIs()
, na psycopg2
dokumentacja
:
Więc nie używaj go z danymi wejściowymi użytkownika.