C#でのデータのサニタイズ方法


  1. パラメータ化クエリ: SQLインジェクション攻撃を防ぐために、パラメータ化クエリを使用しましょう。これにより、ユーザーからの入力がクエリに直接組み込まれることを防ぎ、安全なクエリの実行が可能になります。
string userInput = "'; DROP TABLE Users; --";
string query = "SELECT * FROM Users WHERE Username = @username";
using (SqlCommand command = new SqlCommand(query, connection))
{
    command.Parameters.AddWithValue("@username", userInput);
    // クエリの実行
}
  1. HTMLエスケープ: ユーザーからの入力を表示する場合、HTMLエスケープしておくことで、XSS(クロスサイトスクリプティング)攻撃を防ぐことができます。
string userInput = "<script>alert('XSS');</script>";
string sanitizedInput = System.Web.HttpUtility.HtmlEncode(userInput);
// sanitizedInput を表示する
  1. ファイルパスのサニタイズ: 外部からのファイルパスを使用する場合、不正なパスやディレクトリトラバーサル攻撃を防ぐために、パスの正規化と検証を行いましょう。
string userInput = "..\\..\\..\\secretfile.txt";
string sanitizedPath = Path.GetFullPath(userInput);
if (!sanitizedPath.StartsWith("C:\\safe\\directory\\"))
{
    // エラー処理
}

これらは一部の基本的なサニタイズ方法ですが、実際のアプリケーションに応じてさまざまな対策が必要です。データの入力元や使用目的に応じて、適切なサニタイズ手法を選択してください。また、外部ライブラリやフレームワークの使用も検討すると良いでしょう。