J'écris donc un gestionnaire qui filtre un DataTable mis en cache basé sur AppRelativeCurrentExecutionFilePath à l'aide de la propriété DataView RowFilter. Quelle est la meilleure façon d'encoder l'entrée pour empêcher une attaque par injection?Attaques d'injection contre .NET DataView RowFilter
Est-ce suffisant? Y a-t-il un moyen meilleur/plus élégant?
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();
}
je ne pense pas que vous pouvez injecter sql ici ... seulement provoquer une exception. Mais, oui c'est à peu près exactement ce que je fais. – dotjoe
Si vous utilisez des données en mémoire, pourquoi utiliser 'DataTable' et pas n'importe quelle collection? Vous seriez en mesure de filtrer avec «Où» et ne pas se soucier des injections. –
@SergRogovtsev - J'ai posé la question en '09 donc c'était probablement une application .NET 1.1. Les entreprises sont lentes à mettre à niveau. – MyItchyChin