Python SQLite3 SQL インジェクションの脆弱性
SQL インジェクションの脆弱性により、攻撃者はデータベースに対して悪意のある SQL クエリを実行できます。これらの脆弱性は、ユーザー入力が適切な検証とエスケープを行わずに SQL クエリに直接組み込まれた場合に発生する可能性があります。
コードの脆弱性
提供されたコード スニペットは、次の理由により SQL インジェクションに対して脆弱です。 .format を使用して SQL クエリを動的に構築します。たとえば、次のステートメントを考えてみましょう。
cursor.execute("insert into user(username, password)" " values('{0}', '{1}')".format(username, password))
ユーザー名またはパスワードに悪意のある文字 (一重引用符など) が含まれている場合、それらは SQL クエリの一部として解釈される可能性があります。これにより、攻撃者がテーブルの削除や悪意のあるデータの挿入などの任意の SQL コマンドを実行できる可能性があります。
修正
この脆弱性に対処するには、パラメーター化された文字列補間の代わりにクエリを実行します。パラメーター化されたクエリでは、プレースホルダー (?) を使用してユーザー入力を表し、データベース エンジンがこれらの値のエスケープを処理できるようにすることで、SQL インジェクションを防ぎます。例:
cursor.execute("insert into user(username, password) values(?, ?)", (username, password))
パラメーター化されたクエリを使用すると、データベース エンジンは入力内の特殊文字が適切にエスケープされ、SQL インジェクション攻撃を防ぎます。ユーザー入力が SQL クエリで使用される場合は常に、パラメータ化されたクエリを使用することが不可欠です。
以上がパラメータ化されたクエリは、Python の SQLite3 での SQL インジェクションをどのように防ぐことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。