Что вы используете для проверки адреса электронной почты в форме ASP.NET. Я хочу, чтобы убедиться, что он не содержит XSS-эксплойтов.
Это ASP.NET 1.1
Что вы используете для проверки адреса электронной почты в форме ASP.NET. Я хочу, чтобы убедиться, что он не содержит XSS-эксплойтов.
Это ASP.NET 1.1
Любые теги script, размещенные в веб-форме ASP.NET, приведут к тому, что на вашем сайте будут выбрасываться и необработанные исключения.
Вы можете использовать валидатор asp regex для подтверждения ввода, просто убедитесь, что вы завершаете свой код за помощью с предложением if (IsValid) в случае, если ваш javascript отключен. Если ваш javascript клиента обойден и теги script отправлены в вашу форму asp.net, asp.net выкинет необработанное исключение.
Вы можете использовать что-то вроде:
<asp:RegularExpressionValidator ID="regexEmailValid" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ControlToValidate="tbEmail" ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator>
Вот базовый валидатор электронной почты, который я только что создал на основе идеи Саймона Джонсона. Для этого просто требуется дополнительная функциональность поиска DNS, если это необходимо.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.UI.WebControls;
using System.Text.RegularExpressions;
using System.Web.UI;
namespace CompanyName.Library.Web.Controls
{
[ToolboxData("<{0}:EmailValidator runat=server></{0}:EmailValidator>")]
public class EmailValidator : BaseValidator
{
protected override bool EvaluateIsValid()
{
string val = this.GetControlValidationValue(this.ControlToValidate);
string pattern = @"^[a-z][a-z|0-9|]*([_][a-z|0-9]+)*([.][a-z|0-9]+([_][a-z|0-9]+)*)[email protected][a-z][a-z|0-9|]*\.([a-z][a-z|0-9]*(\.[a-z][a-z|0-9]*)?)$";
Match match = Regex.Match(val.Trim(), pattern, RegexOptions.IgnoreCase);
if (match.Success)
return true;
else
return false;
}
}
}
Вы можете использовать валидатор регулярных выражений. Свойство ValidationExpression имеет кнопку, которую вы можете нажать в панели свойств Visual Studio, которая получает списки много полезных выражений. Они используются для адресов электронной почты:
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
Утверждение, что это настоящий адрес электронной почты, намного сложнее.
Правильное выражение для подтверждения синтаксиса может быть очень длинным (например, http://www.regular-expressions.info/email.html). Лучший способ подтвердить адрес электронной почты - отправить электронное письмо пользователю и получить ответ от пользователя, нажав на ссылку, чтобы подтвердить, что они получили электронное письмо (как работает большинство систем регистрации).
В нашем коде мы имеем специальный валидатор, унаследованный от класса BaseValidator.
Этот класс выполняет следующие действия:
Это самое близкое к тому, что вы можете получить для проверки, фактически не отправив человеку ссылку на подтверждение по электронной почте.
Предотвращение XSS - это другая проблема при проверке ввода.
Что касается XSS: вы не должны пытаться проверять ввод для XSS или связанных с ним эксплойтов. Вы должны предотвращать эксплойты XSS, SQL-инъекцию и т.д., Избегая корректной работы при вставке строк на другой язык, где некоторые символы являются "волшебными", например, при вставке строк в HTML или SQL. Например, такое имя, как O'Reilly, является вполне допустимым вводом, но может привести к сбою или ухудшению, если он вставлен без привязки к SQL. Вы не можете предотвратить такие проблемы путем проверки ввода.
Валидация ввода пользователя имеет смысл предотвращать отсутствующие или искаженные данные, например. пользователь, который пишет "asdf" в поле почтового индекса и так далее. Wrt. адреса электронной почты, синтаксис настолько сложный, хотя он не дает большого преимущества для проверки его с помощью регулярного выражения. Просто проверьте, что он содержит "@".
Вы также должны всегда выполнять проверку подлинности на стороне сервера.
public bool IsValidEmailAddress(string email)
{
try
{
var emailChecked = new System.Net.Mail.MailAddress(email);
return true;
}
catch
{
return false;
}
}