AsIs
není bezpečné, pokud opravdu nevíte, co děláte. Můžete jej použít například pro testování jednotek.
Předávání parametrů není tak nebezpečné, pokud svůj dotaz sql předem nenaformátujete. Nikdy to nedělejte:
sql_query = 'SELECT * FROM {}'.format(user_input)
cur.execute(sql_query)
Od user_input
může být ';DROP DATABASE;'
například.
Místo toho udělejte:
sql_query = 'SELECT * FROM %s'
cur.execute(sql_query, (user_input,))
pyscopg2
vyčistí váš dotaz. Také můžete předem ošetřit parametry ve vašem kódu vlastní logikou, pokud opravdu nedůvěřujete vstupu vašeho uživatele.
Podle psycopg2
dokumentaci
:
Také bych nikdy, nikdy nedovolil svým uživatelům, aby mi řekli, na kterou tabulku se mám dotazovat. Logika (nebo trasy) vaší aplikace by vám to měla říct.
Ohledně AsIs()
, za psycopg2
dokumentaci
:
Takže jej nepoužívejte se vstupem uživatele.