DataView RowFilterプロパティを使用してAppRelativeCurrentExecutionFilePathに基づいてキャッシュされたDataTableをフィルタリングするハンドラを作成しています。注入攻撃を防ぐために入力をエンコードする最良の方法は何ですか?.NET DataView RowFilterに対するインジェクション攻撃
次は十分ですか?より良い/よりエレガントな方法がありますか?
dataView.RowFilter = String.Format("Name LIKE '{0}%'", EncodeString(query));
private string EncodeString(string s)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.Length; i++)
{
char c = s[i];
if (c == '*' || c == '%' || c == '[' || c == ']')
sb.Append("[").Append(c).Append("]");
else if (c == '\'')
sb.Append("''");
else
sb.Append(c);
}
return sb.ToString();
}
私は...あなたがここにSQLを注入することができるとは思わない。指摘したように、次のような作業のようなものができ、注射によって、テーブル内のすべての行を取得することが可能です例外が発生します。しかし、はい、それは私がやることとほぼ同じです。 – dotjoe
メモリ内のデータを使用している場合は、コレクションだけでなく、なぜDataTableを使用するのですか?あなたは 'どこで'を使ってそれをフィルターに掛けることができ、注射については気にしません。 –
@SergRogovtsev - 私は2009年に質問したので、おそらく.NET 1.1アプリでした。企業のアップグレードは遅いです。 – MyItchyChin