Подтвердить что ты не робот

Проверка адресов электронной почты для ASP.NET

Что вы используете для проверки адреса электронной почты в форме ASP.NET. Я хочу, чтобы убедиться, что он не содержит XSS-эксплойтов.

Это ASP.NET 1.1

4b9b3361

Ответ 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>

Ответ 2

Вот базовый валидатор электронной почты, который я только что создал на основе идеи Саймона Джонсона. Для этого просто требуется дополнительная функциональность поиска 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;
        }

    }
}

Ответ 3

Вы можете использовать валидатор регулярных выражений. Свойство ValidationExpression имеет кнопку, которую вы можете нажать в панели свойств Visual Studio, которая получает списки много полезных выражений. Они используются для адресов электронной почты:

\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

Ответ 4

Утверждение, что это настоящий адрес электронной почты, намного сложнее.

Правильное выражение для подтверждения синтаксиса может быть очень длинным (например, http://www.regular-expressions.info/email.html). Лучший способ подтвердить адрес электронной почты - отправить электронное письмо пользователю и получить ответ от пользователя, нажав на ссылку, чтобы подтвердить, что они получили электронное письмо (как работает большинство систем регистрации).

Ответ 5

В нашем коде мы имеем специальный валидатор, унаследованный от класса BaseValidator.

Этот класс выполняет следующие действия:

  • Проверяет адрес электронной почты на регулярное выражение.
  • Выполняет поиск в записи MX для домена, чтобы убедиться, что есть хотя бы сервер для доставки.

Это самое близкое к тому, что вы можете получить для проверки, фактически не отправив человеку ссылку на подтверждение по электронной почте.

Ответ 6

Предотвращение XSS - это другая проблема при проверке ввода.

Что касается XSS: вы не должны пытаться проверять ввод для XSS или связанных с ним эксплойтов. Вы должны предотвращать эксплойты XSS, SQL-инъекцию и т.д., Избегая корректной работы при вставке строк на другой язык, где некоторые символы являются "волшебными", например, при вставке строк в HTML или SQL. Например, такое имя, как O'Reilly, является вполне допустимым вводом, но может привести к сбою или ухудшению, если он вставлен без привязки к SQL. Вы не можете предотвратить такие проблемы путем проверки ввода.

Валидация ввода пользователя имеет смысл предотвращать отсутствующие или искаженные данные, например. пользователь, который пишет "asdf" в поле почтового индекса и так далее. Wrt. адреса электронной почты, синтаксис настолько сложный, хотя он не дает большого преимущества для проверки его с помощью регулярного выражения. Просто проверьте, что он содержит "@".

Ответ 7

Вы также должны всегда выполнять проверку подлинности на стороне сервера.

public bool IsValidEmailAddress(string email)
{
    try
    {
        var emailChecked = new System.Net.Mail.MailAddress(email);
        return true;
    }
    catch
    {
        return false;
    }
}