ホームページ >データベース >mysql チュートリアル >SQL インジェクションを防ぐために Python で MySQL クエリを安全に実行するにはどうすればよいですか?

SQL インジェクションを防ぐために Python で MySQL クエリを安全に実行するにはどうすればよいですか?

DDD
DDDオリジナル
2024-12-13 14:21:10297ブラウズ

How Can I Securely Execute MySQL Queries in Python to Prevent SQL Injection?

Python での安全な MySQL 接続とクエリ実行

Web アプリケーションの領域では、安全なデータ処理を確保することが最も重要です。 MySQL を使用する場合、一般的な懸念事項の 1 つは、SQL インジェクション攻撃を防ぐことです。これに対処するには、データベースを悪意のある操作から保護するベスト プラクティスを採用することが不可欠です。

そのようなアプローチの 1 つは、パラメーター マーカー ('%s') を含むプリペアド ステートメントを利用することです。この方法を使用すると、セキュリティを維持しながらクエリに変数を挿入できます。方法は次のとおりです:

  1. クエリを準備します: 変数の代わりにパラメーター マーカーを使用した「execute」メソッドを使用して、準備されたステートメントを作成します。例:
cursor = db.cursor()
max_price = 5
statement = "SELECT spam, eggs, sausage FROM breakfast WHERE price < %s"
  1. バインド変数: 変数を直接入力する代わりに、列表または元組織を使用して "execute" メソッドの 2 番目を使用します。これにより、変数が準備されたステートメントにバインドされ、変数が適切にエスケープされるようになります。
cursor.execute(statement, (max_price,))

直接置換を避ける:

文字列フォーマットを使用してクエリに変数を直接置換しないことが重要です。これは SQL につながる可能性があるためです。インジェクションの脆弱性。代わりに、パラメータ マーカーを厳密に使用し、変数をプリペアド ステートメントにバインドします。

たとえば、次のような文字列置換は使用しないでください。

cursor.execute("SELECT spam, eggs, sausage FROM breakfast WHERE price < %s" % (max_price,))

追加の考慮事項:

  • パラメータが文字列の場合、パラメータ ホルダー ('%s') を一重引用符で囲まないでください。ドライバーは適切なエスケープを提供します。
  • アプリケーション全体のセキュリティを確保するには、コードベース全体でパラメーター化されたクエリを一貫して使用します。

以上がSQL インジェクションを防ぐために Python で MySQL クエリを安全に実行するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。