sql >> Database teknologi >  >> RDS >> PostgreSQL

psycopg2 og SQL-injektionssikkerhed

AsIs er usikker, medmindre du virkelig ved, hvad du laver. Du kan f.eks. bruge den til enhedstest.

Det er ikke så usikkert at sende parametre, så længe du ikke forudformaterer din sql-forespørgsel. Gør aldrig:

sql_query = 'SELECT * FROM {}'.format(user_input)
cur.execute(sql_query)

Siden user_input kunne være ';DROP DATABASE;' for eksempel.

Gør i stedet:

sql_query = 'SELECT * FROM %s'
cur.execute(sql_query, (user_input,))

pyscopg2 vil rense din forespørgsel. Du kan også præ-sanere parametrene i din kode med din egen logik, hvis du virkelig ikke stoler på din brugers input.

Per psycopg2 s dokumentation :

Desuden ville jeg aldrig nogensinde lade mine brugere fortælle mig, hvilken tabel jeg skulle forespørge på. Din apps logik (eller ruter) burde fortælle dig det.

Angående AsIs() , af psycopg2 s dokumentation :

Så brug det ikke med brugerens input.



  1. Hent oracle output parameter ved hjælp af OracleCommand

  2. SQL - Sådan vælger du en række med en kolonne med maks. værdi

  3. Login script virker ikke på live server

  4. XAMPP-opsætning - MySQL virker ikke