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



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



Это ASP.NET 1.1

685   8  

8 ответов:

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

вы можете использовать валидатор регулярных выражений asp для подтверждения ввода, просто убедитесь, что вы обернули свой код за метод с предложением 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>

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

    }
}

обновление: пожалуйста, не используйте исходное регулярное выражение. Искать новые, более полный пример.

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

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

форумчане, что это реальный адрес электронной почты намного труднее.

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

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

этот класс делает следующее:

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

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

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

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

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

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

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

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

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);
}

Comments

    Ничего не найдено.