PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

psycopg2 i zabezpieczenia wstrzykiwania SQL

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Unikalne ograniczenie kombinacji dwóch kolumn?

  2. Array_agg w postgresie selektywnie cytuje

  3. Unikatowe ograniczenie Postgresa, które nie wymusza unikalności

  4. Konfiguracja Play 2.4.0 z Postgres i HikariCP powoduje błąd konfiguracji

  5. Testowanie funkcji PostgreSQL, które wykorzystują i zwracają refcursor