ホームページ > データベース > mysql チュートリアル > インジェクションを回避するために、Python の「MySQLdb」で SQL ワイルドカードを安全に使用する方法

インジェクションを回避するために、Python の「MySQLdb」で SQL ワイルドカードを安全に使用する方法

Mary-Kate Olsen
リリース: 2024-12-21 03:31:08
オリジナル
797 人が閲覧しました

How to Safely Use SQL Wildcards with Python's `MySQLdb` to Avoid Injection?

Python 文字列形式での SQL ワイルドカードと LIKE 演算子の使用

SQL ワイルドカードと LIKE 演算子を Python 文字列形式に挿入するのは難しい場合があります。この記事では、MySQLdb を使用して MySQL クエリを実行しようとしたときに発生する一般的なエラーの解決策を提供します。

MySQLdb からのエラー

試行 3 と 4 では、MySQLdb からエラーが返され、「フォーマット文字列の引数が不足しています。」これは、Python の文字列書式設定演算子によって % 記号が書式指定子として解釈されるために発生します。

SQL インジェクションに対する脆弱性

示されている最初の 4 つの試行は、次のような脆弱性があります。 SQL インジェクション攻撃。クエリ変数などのユーザー入力は、悪意のある SQL が実行されないようにサニタイズまたはエスケープする必要があります。

正しいアプローチ

推奨されるアプローチは、プレースホルダーを使用することです。文字列の書式設定の代わりに。以下に例を示します。

curs.execute("""SELECT tag.userId, count(user.id) as totalRows 
                  FROM user 
            INNER JOIN tag ON user.id = tag.userId 
                 WHERE user.username LIKE %s""", ('%' + query + '%',))
ログイン後にコピー

2 つの引数がexecute() に渡されます:

  • ワイルドカードを挿入するためのプレースホルダーを含む SQL ステートメント。
  • タプルワイルドカード文字を含むサニタイズされたクエリ値が含まれています。

このアプローチにより、次のことが保証されます。 SQL ステートメントは有効であり、SQL インジェクションから保護されています。

以上がインジェクションを回避するために、Python の「MySQLdb」で SQL ワイルドカードを安全に使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート