PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

psycopg2 dan keamanan injeksi SQL

AsIs tidak aman, kecuali jika Anda benar-benar tahu apa yang Anda lakukan. Anda dapat menggunakannya untuk pengujian unit misalnya.

Melewati parameter tidak terlalu tidak aman, selama Anda tidak memformat kueri sql Anda terlebih dahulu. Jangan pernah:

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

Sejak user_input bisa jadi ';DROP DATABASE;' misalnya.

Sebagai gantinya, lakukan:

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

pyscopg2 akan membersihkan kueri Anda. Selain itu, Anda dapat membersihkan parameter dalam kode Anda dengan logika Anda sendiri, jika Anda benar-benar tidak mempercayai masukan pengguna Anda.

Per psycopg2 dokumentasi :

Juga, saya tidak akan pernah membiarkan pengguna saya memberi tahu saya tabel mana yang harus saya tanyakan. Logika (atau rute) aplikasi Anda akan memberi tahu Anda hal itu.

Mengenai AsIs() , per psycopg2 dokumentasi :

Jadi, jangan menggunakannya dengan input pengguna.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana saya bisa melakukan kurang dari, lebih besar dari di bidang JSON Postgres?

  2. Postgres - Tarik salinan seluruh DB dari server jauh, ke mesin pengembang lokal

  3. Mengapa item urutan Postgres naik meskipun pembuatan objek gagal?

  4. Membuat database dalam pengujian SQLAlchemy dengan PostgreSQL

  5. Jenis kolom Entity Framework Core jsonb