sql >> Database >  >> RDS >> PostgreSQL

psycopg2 en SQL-injectiebeveiliging

AsIs onveilig is, tenzij je echt weet wat je doet. U kunt het bijvoorbeeld gebruiken voor unittesten.

Het doorgeven van parameters is niet zo onveilig, zolang u uw SQL-query niet vooraf formatteert. Nooit doen:

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

Sinds user_input zou kunnen zijn ';DROP DATABASE;' bijvoorbeeld.

Doe in plaats daarvan:

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

pyscopg2 zal uw vraag zuiveren. U kunt de parameters in uw code ook vooraf zuiveren met uw eigen logica, als u de invoer van uw gebruiker echt niet vertrouwt.

Per psycopg2 's documentatie :

Ook zou ik nooit, maar dan ook nooit, mijn gebruikers laten vertellen welke tabel ik moet opvragen. De logica (of routes) van uw app zouden u dat moeten vertellen.

Over AsIs() , per psycopg2 's documentatie :

Gebruik het dus niet met gebruikersinvoer.



  1. JSON_SET() vs JSON_INSERT() vs JSON_REPLACE() in MySQL:wat is het verschil?

  2. MySql selecteer formaat, ronde kolom

  3. Waarschuwing:mysqli_connect():(HY000/2002):Geen dergelijk bestand of map

  4. Hoe vindt u de query's die een andere query blokkeren?