ユーザー入力による 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 サイトの他の関連記事を参照してください。