Python での SQL インジェクションからの保護
問題:
次の Python スクリプトがあります。 SQLite データベース内の char(80) 値を更新します。文字列値はユーザーから直接取得され、JSON ペイロードとしてスクリプトに渡されます。このアプローチが SQL インジェクション攻撃に対して脆弱であることは承知しています。
解決策:
SQL インジェクションから保護するために、更新操作でパラメーター化されたクエリを使用できます。パラメータ化されたクエリを使用すると、値をクエリ文字列に直接含めずに SQL ステートメントに渡すことができます。これにより、悪意のある入力による SQL 構文の中断が防止されます。
Python sqlite3 ライブラリは、? を介したパラメーター化されたクエリをサポートしています。プレースホルダー。値を、クエリ内のプレースホルダーに対応する値のタプルとして実行メソッドに渡すことができます。
改訂されたコード:
ここに、パラメータ化されたクエリを使用する setLabel メソッド:
def setLabel( self, userId, refId, label ): self._db.cursor().execute( """ UPDATE items SET label = ? WHERE userId = ? AND refId = ?""", (label, userId, refId) ) self._db.commit()
パラメータ化されたクエリを使用すると、ユーザー入力が次のようになります。 SQL ステートメントの一部ではなく値として扱われるため、SQL インジェクション攻撃を効果的に防止できます。
以上がパラメーター化されたクエリは、Python の SQLite インタラクションでの SQL インジェクションをどのように防ぐことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。