Зная контекст, в котором вы используете строку AffiliatesEmail
, это помогает узнать, насколько тщательно вы должны проверять и дезинфицировать строку.
Скажем, например, что мы знаем, что AffiliatesEmail
был действителен, только если он был числовым. Таким образом, вы будете защищены, если вы отклоните любой Request.QueryString["somestr"]
, который не подтвердится как число.
Теперь я подозреваю, что AffiliatesEmail
на самом деле должен быть действительным адресом электронной почты.
Используя это знание, мы можем теперь подтвердить его как адрес электронной почты и отклонить все остальное:
using System.Net.Mail;
try
{
MailAddress ma = new MailAddress(AffiliatesEmail);
}
catch (FormatException fe)
{
//Email isn't valid, so don't output it to the client!!!
}
Приведенный выше код просто проверяет, является ли строка адресом электронной почты (как определено в .NET) - если это не так, нам не нужно беспокоиться о том, что равно , потому что мы просто не доверяем этому.
Так что не слишком зацикливайтесь на том, чтобы заглядывать всему, что попадает в строку запроса - просто зная границы допустимого, вы можете избежать сложных регулярных выражений и процедур очистки XSS.