Проверка адреса электронной почты для ASP.NET - PullRequest
62 голосов
/ 08 октября 2008

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

Это ASP.NET 1.1

Ответы [ 8 ]

115 голосов
/ 08 октября 2008

Любые теги сценариев, размещенные в веб-форме ASP.NET, приведут к тому, что ваш сайт выдаст исключение и необработанное исключение.

Вы можете использовать валидатор asp regex для подтверждения ввода, просто убедитесь, что вы заключили код в метод с условием if (IsValid) на случай, если ваш javascript будет обойден. Если ваш клиентский javascript обойден, а теги сценария размещены в форме 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>
19 голосов
/ 07 ноября 2008

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

    }
}

Обновление: пожалуйста, не используйте оригинальный Regex. Ищите более новый более полный образец.

7 голосов
/ 08 октября 2008

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

\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
5 голосов
/ 08 октября 2008

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

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

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

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

5 голосов
/ 08 октября 2008

Подтвердить, что это реальный адрес электронной почты, гораздо сложнее.

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

4 голосов
/ 31 марта 2017

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

public bool IsValidEmailAddress(string email)
{
    try
    {
        var emailChecked = new System.Net.Mail.MailAddress(email);
        return true;
    }
    catch
    {
        return false;
    }
}
4 голосов
/ 08 октября 2008

Предотвращение XSS отличается от проверки ввода.

Относительно XSS: Вы не должны пытаться проверять ввод для XSS или связанных эксплойтов. Следует избегать эксплойтов XSS, внедрения SQL и т. Д., Корректно экранируя при вставке строк на другой язык, где некоторые символы являются «волшебными», например при вставке строк в HTML или SQL. Например, такое имя, как O'Reilly, является абсолютно корректным вводом, но может привести к сбою или, что еще хуже, при вставке без экранирования в SQL. Вы не можете предотвратить подобные проблемы, проверяя ввод.

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

0 голосов
/ 09 августа 2018

Быстрый и простой код

public static bool IsValidEmail(this string email)
{
    const string pattern = @"^(?!\.)(""([^""\r\\]|\\[""\r\\])*""|" + @"([-a-z0-9!#$%&'*+/=?^_`{|}~]|(?<!\.)\.)*)(?<!\.)" + @"@[a-z0-9][\w\.-]*[a-z0-9]\.[a-z][a-z\.]*[a-z]$";    
    var regex = new Regex(pattern, RegexOptions.IgnoreCase);    
    return regex.IsMatch(email);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...