Evet, öyle. bunu önlemek için böyle bir şey kullanın: Eğer böyle tabloyu giremezsiniz
cursor.execute("INSERT INTO table VALUES ?", args)
Not. İdeal olarak, tablonun herhangi bir kullanıcı girdisinden gelmesi şartıyla, kodlanmış olması gerekir. Tablo için yaptığınız şeye benzer bir dize kullanabilirsiniz, ancak bir kullanıcının bunu bir şekilde değiştiremeyeceğinden% 100 emin olun ... Daha fazla bilgi için Can I use parameters for the table name in sqlite3?'a bakın.
Esasen, veri veritabanı güvenli hale getirmek için emin olun, çünkü imleç komutu parametreleri koymak istiyorum. İlk komutunuzla, güvenli olmayan SQL kodunuza bir şey koyan özel bir table
veya args
yapmak nispeten kolaydır. python pages ve başvurulan http://xkcd.com/327/'a bakın. Özellikle, piton sayfalar alıntı:
Temelde
Usually your SQL operations will need to use values from Python variables. You shouldn’t assemble your query using Python’s string operations because doing so is insecure; it makes your program vulnerable to an SQL injection attack (see http://xkcd.com/327/ for humorous example of what can go wrong).
Instead, use the DB-API’s parameter substitution. Put ? as a placeholder wherever you want to use a value, and then provide a tuple of values as the second argument to the cursor’s execute() method. (Other database modules may use a different placeholder, such as %s or :1.)
, birisi, böyle bir şey başka bir emir yürütülen bir args ayarlayabilirsiniz:
args="name; DELETE table"
böylece verilen değer şeyler olacak cursor.execute kullanma argüman listelenmiş olabilir ve üzerinde bir sorgu yaptığınızda, tam olarak ne çıkacaksınız. XKCD bunu da esprili olarak açıklıyor.
Nesin, SQL yerleştirme üzerinde okumak öneririz. Bunu çok açık hale getirmeli. –