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.