sql >> Databasteknik >  >> RDS >> PostgreSQL

psycopg2 och SQL-injektionssäkerhet

AsIs är osäker, om du inte riktigt vet vad du gör. Du kan till exempel använda den för enhetstestning.

Att skicka parametrar är inte så osäkert, så länge du inte förformaterar din sql-fråga. Gör aldrig:

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

Sedan user_input kan vara ';DROP DATABASE;' till exempel.

Gör istället:

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

pyscopg2 kommer att rensa din fråga. Du kan också försanera parametrarna i din kod med din egen logik, om du verkligen inte litar på din användares input.

Enligt psycopg2 s dokumentation :

Dessutom skulle jag aldrig, aldrig, låta mina användare berätta för mig vilken tabell jag ska fråga. Din app logik (eller rutter) borde berätta det.

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

Så använd den inte med användarens input.



  1. Databasdesign - Push Model, eller Fan-out-on-write

  2. Logstash INPUT MySQL

  3. Hur man söker efter nollvärde för en dubbel som är hämtad från en databas

  4. Hur man lägger till ojdbc-burken i mitt projekt och använder den