そこで、DataView RowFilter プロパティを使用して、AppRelativeCurrentExecutionFilePath に基づいてキャッシュされた DataTable をフィルター処理するハンドラーを作成しています。インジェクション攻撃を防ぐために入力をエンコードする最良の方法は何ですか?
以下で十分ですか?より良い/よりエレガントな方法はありますか?
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();
}