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

SQL インジェクションを防ぐために WHERE IN ステートメントを安全に使用するにはどうすればよいですか?

DDD
リリース: 2025-01-04 03:26:40
オリジナル
532 人が閲覧しました

How Can I Safely Use WHERE IN Statements to Prevent SQL Injection?

IN クエリの安全な処理: WHERE IN ステートメントを理解する

データベース クエリを使用する場合、値のセットに基づいて特定のレコードを取得することは一般的な要件です。 WHERE IN ステートメントは、これを実現する効率的な方法を提供します。

データベース スキーマとインテント

次のデータベースについて考えてみましょう。 table:

CREATE TABLE IF NOT EXISTS tab (_id integer PRIMARY KEY AUTOINCREMENT, obj text NOT NULL);
ログイン後にコピー

obj 列が含まれるレコードを取得しようとしていますvalue は変数のリストと一致します。変数は適切に処理されないと SQL インジェクションに対して脆弱になる可能性があります。

最初のアプローチ: 手動による方法

list_of_vars を使用して手動でクエリを構築しようとしています。プレースホルダー文字列を生成するための join() と、その数の不一致によりエラーがスローされる場合があります。 bindings.

statement = "SELECT * FROM tab WHERE obj IN (?);"
c.execute(statement, "'"+"','".join(list_of_vars)+"'")
ログイン後にコピー

推奨されるアプローチ: パラメーター化されたクエリ

IN クエリを安全に実行するには、パラメーター プレースホルダー (?) を使用し、変数のリストをパラメーターとしてバインドします。 format メソッドを使用してステートメントを作成し、適切な数のプレースホルダーを生成します。

statement = "SELECT * FROM tab WHERE obj IN ({0})".format(', '.join(['?'] * len(list_of_vars)))
c.execute(statement, list_of_vars)
ログイン後にコピー

パラメーター値リストとして list_of_vars を渡すことで、適切なバインドが確保され、SQL インジェクションの脆弱性が防止されます。

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

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