ホームページ > データベース > mysql チュートリアル > パラメータ化された SQL ステートメントは、ユーザー入力による INSERT ステートメントへの SQL インジェクションをどのように防ぐことができますか?

パラメータ化された SQL ステートメントは、ユーザー入力による INSERT ステートメントへの SQL インジェクションをどのように防ぐことができますか?

Linda Hamilton
リリース: 2025-01-04 11:49:37
オリジナル
526 人が閲覧しました

How Can Parameterized SQL Statements Prevent SQL Injection in INSERT Statements with User Input?

ユーザー入力による INSERT ステートメントの SQL インジェクションの脆弱性

内部アクセス可能にもかかわらず、安全なオンライン アプリケーションの開発では SQL インジェクション攻撃に対する警戒が必要です。ユーザー生成のコメントを組み込んだ INSERT ステートメントにも、これらの脆弱性が潜んでいる可能性があります。

脅威について

SQL インジェクションのエクスプロイトは、悪意のあるユーザー入力によって SQL クエリが操作されるときに発生し、不正なクエリが実行される可能性があります。アクセス、データ変更、またはシステム侵害。コメントを含む INSERT ステートメントの場合、攻撃者はクエリ自体を変更するコードを挿入する可能性があります。

たとえば、ID フィールドとコメント フィールドを持つコメント テーブルを考えてみましょう。 「'DELETE FROM users;--」のような一見無害なコメントは、SQL ステートメントに直接挿入すると悲惨な結果になる可能性があります。ユーザー テーブルからすべてのレコードが削除され、認可チェックがサイレントにバイパスされます。

インジェクションからの保護

このリスクを軽減するには、パラメータ化された SQL ステートメントを利用する必要があります。これらのステートメントは、プレースホルダー (@Comment など) を使用してユーザー入力を表します。その後、パラメータは特定の値にバインドされ、悪意のあるコードがクエリの一部として解釈されるのを防ぎます。

例:

using System.Data;
using System.Data.SqlClient;

public class SurveyController
{
    private string _connectionString;

    public SurveyController(string connectionString)
    {
        _connectionString = connectionString;
    }

    public void InsertComment(string comment)
    {
        using (var connection = new SqlConnection(_connectionString))
        {
            using (var command = connection.CreateCommand())
            {
                command.CommandText = "INSERT INTO Comments (Comment) VALUES (@Comment)";
                command.Parameters.AddWithValue("@Comment", comment);

                connection.Open();
                command.ExecuteNonQuery();
            }
        }
    }
}
ログイン後にコピー

この例では、 @Comment パラメーターは、コメントが SQL コードとして解釈されるのを防ぎます。 AddWithValue メソッドは、コメントがパラメータにバインドされ、リテラル文字列として渡されることを保証します。

結論

SQL インジェクションを防ぐには、パラメータ化された SQL の実装が重要です。ユーザー入力がデータとして扱われるようにすることで、アプリケーションとデータを悪意のある攻撃から保護できます。

以上がパラメータ化された SQL ステートメントは、ユーザー入力による INSERT ステートメントへの SQL インジェクションをどのように防ぐことができますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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