2017-03-23 4 views
0

私のプログラムではPythonを使いたいと思っていました。これを使用しようとすると、enter a name: name; DROP TABLE test;は機能せず、通常通り入力されます。私がenter a name: name' DROP TABLE test;を使用している場合は、 と表示されます。名前を入力すると、明らかに変数になります。Python SQLite3 injection

c.execute("INSERT INTO test VALUES('%s')" % test) 
sqlite3.OperationalError: near "DROP": syntax error 

と私は

enter name: test'"DROP TABLE test;" 

c.execute("INSERT INTO test VALUES('%s')" % test) 
sqlite3.OperationalError: near ""DROP TABLE test;"": syntax error 

を使用する場合、私は(私はあなたが使用する必要があります知っている?)ので、私は私のプログラムでそれを試してみることができますし、それに対して予防する方法を知りたい

+0

見にhttps://docs.python.org/3/library/sqlite3.htmlをお読みくださいSQLに引数を安全に渡し、注射を防ぐ方法。 –

+0

あなたは彼の質問を読んだか?クラウス?彼は**このプログラムを注射可能にしたいと思っています。 – zack6849

答えて

2

VALUES句は、閉じ括弧を必要とするので、あなたはこのような何か入力する必要があります。

 
name'); DROP TABLE test; -- 

(0123をは、コメントを開始して解釈されることから、元のSQL文の最後の')を防ぐために。)

とPythonのsqlite3.Cursor.execute()は、単一のステートメントを実行し、その注入のこの種は動作しません。あなたのプログラムは代わりにexecutescript()を使用する必要があります。
(あなたはSELECTを持っている場合しかし、あなたは、このようなAND password='...'など任意の以下のフィルタ条件を、抑制するためにこれを使用することができます。)

+0

ありがとう、それは動作します。それを可能な限りあらゆる方法で守るようになりました。 – a09hopper