ホームページ >データベース >mysql チュートリアル >パラメータ化されたクエリは SQL インジェクション攻撃からどのように保護できますか?

パラメータ化されたクエリは SQL インジェクション攻撃からどのように保護できますか?

Patricia Arquette
Patricia Arquetteオリジナル
2025-01-24 01:11:09172ブラウズ

How Can Parameterized Queries Protect Against SQL Injection Attacks?

パラメータ化されたクエリ: SQL インジェクションに対する堅牢な防御

SQL インジェクションは依然として蔓延した脅威であり、データベースのセキュリティを侵害する可能性があります。 パラメーター化されたクエリは、ユーザーが指定したデータを SQL コード自体から分離することにより、非常に効果的なソリューションを提供します。これにより、悪意のあるコードの実行が防止され、データベースが保護されます。

パラメータ化されたクエリの構築

次の脆弱なクエリについて考えてみましょう:

<code class="language-sql">"SELECT foo FROM bar WHERE baz = '" & fuz & "'"</code>

これは SQL インジェクションの影響を受けやすいです。 パラメータを使用したより安全な代替方法は次のとおりです:

<code class="language-vbscript">WITH command
    .Parameters.Count = 1
    .Parameters.Item(0).ParameterName = "@baz"
    .Parameters.Item(0).Value = fuz
END WITH</code>

SQL Server では、パラメータ化は次のようになります:

<code class="language-sql">DIM sql AS STRING = "SELECT foo FROM bar WHERE baz= @Baz"

USING cn AS NEW SqlConnection("YOUR CONNECTION STRING"), _
    cmd AS NEW SqlCommand(sql, cn)

    cmd.Parameters.Add("@Baz", SqlDbType.VarChar, 50).Value = baz
    RETURN cmd.ExecuteScalar().ToString()
END USING</code>

セキュリティを超えた利点

メリットはセキュリティを超えて広がります:

  • パフォーマンスの強化: 文字列の連結を排除することで、データベースがクエリの実行を最適化し、処理の高速化につながります。
  • エラーの削減: クエリの構築が簡素化され、構文エラーの可能性が最小限に抑えられます。
  • 保守性の向上: パラメーターを使用すると、クエリの変更と再利用が容易になり、コードの品質が向上します。

ストアド プロシージャとパラメータ化: 組み合わせたアプローチ

ストアド プロシージャにはセキュリティ上の利点がいくつかありますが、パラメータ化されたクエリに代わるものではありません。 インジェクションの脆弱性を防ぐために、ストアド プロシージャを呼び出すときもパラメーターを使用する必要があります。

パラメータ化されたクエリを一貫して使用することは、アプリケーションの堅牢なセキュリティ、パフォーマンスの向上、コード品質の向上にとって非常に重要です。

以上がパラメータ化されたクエリは SQL インジェクション攻撃からどのように保護できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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