web-dev-qa-db-ja.com

ASP.NETの電子メールアドレス検証

ASP.NETフォームで電子メールアドレスを検証するために何を使用しますか。 XSSエクスプロイトが含まれていないことを確認したい。

これはASP.NET 1.1です

64
Brian G

ASP.NET Webフォームに投稿されたスクリプトタグは、サイトで例外をスローして処理しません。

Asp regexバリデータを使用して入力を確認できます。javascriptがバイパスされる場合に備えて、if(IsValid)句でコードの背後のメソッドをラップするだけです。クライアント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>
118
WebDude

以下は、Simon Johnsonのアイデアに基づいて作成したばかりの基本的な電子メール検証ツールです。必要な場合は、追加される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;
        }

    }
}

更新:元の正規表現を使用しないでください。より新しい完全なサンプルを探してください。

19
John_

RegularExpressionバリデーターを使用できます。 ValidationExpressionプロパティには、Visual Studioのプロパティのパネルで押すことができるボタンがあり、多くの便利な式のリストを取得できます。メールアドレスに使用するものは次のとおりです。

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

それが実際のメールアドレスであることを検証するのははるかに困難です。

構文が正しいことを確認する正規表現は非常に長くなる場合があります(たとえば、 http://www.regular-expressions.info/email.html を参照してください)。電子メールアドレスを確認する最良の方法は、ユーザーに電子メールを送信し、リンクをクリックしてユーザーに返信してもらうことです(ほとんどのサインアップシステムが機能する方法)。

5
RB.

このコードには、BaseValidatorクラスから継承された特定のバリデーターがあります。

このクラスは次のことを行います。

  1. 正規表現に対して電子メールアドレスを検証します。
  2. ドメインのMXレコードを検索して、少なくとも配信先のサーバーがあることを確認します。

これは、実際にその人に電子メールの確認リンクを送信せずに検証に到達できる最も近い方法です。

5
Simon Johnson

XSSの防止は、入力の検証とは異なる問題です。

XSSについて:XSSまたは関連するエクスプロイトのinputをチェックしないでください。 HTMLやSQLに文字列を挿入するときなど、一部の文字が「魔法」である別の言語に文字列を挿入するときは、正しくエスケープすることにより、XSSの悪用、SQLインジェクションなどを防ぐ必要があります。たとえば、O'Reillyのような名前は完全に有効な入力ですが、SQLにエスケープせずに挿入するとクラッシュするか、さらに悪化する可能性があります。入力を検証しても、この種の問題を防ぐことはできません。

ユーザー入力の検証は、データの欠落や不正な形式を防ぐのに理にかなっています。郵便番号フィールドに「asdf」と書くユーザーなど。 Wrt。電子メールは、構文が非常に複雑であるため、正規表現を使用して検証することにはあまり利点がありません。 「@」が含まれていることを確認してください。

4
JacquesB

常にサーバー側の検証も行う必要があります。

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

すばやく簡単なコード

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);
}
0
Naveen Soni