Czego używasz do sprawdzania poprawności adresu e-mail w formularzu ASP.NET. Chcę się upewnić, że nie zawiera on żadnych exploitów XSS.Sprawdzanie adresu e-mail dla ASP.NET
To jest ASP.NET 1.1
Czego używasz do sprawdzania poprawności adresu e-mail w formularzu ASP.NET. Chcę się upewnić, że nie zawiera on żadnych exploitów XSS.Sprawdzanie adresu e-mail dla ASP.NET
To jest ASP.NET 1.1
Wszelkie tagi skryptów napisanych w formularzu internetowym ASP.NET spowoduje witryny rzucać i nieobsługiwany wyjątek.
Możesz użyć walidatora regex asp, aby potwierdzić wejście, wystarczy upewnić się, że owinąłeś swój kod za pomocą klauzuli if (IsValid) na wypadek, gdyby Twój javascript został ominięty. Jeśli Twój kliencki javascript jest pomijany, a znaczniki skryptu są wysyłane do formularza asp.net, asp.net wygeneruje nieobsługiwany wyjątek.
Można użyć coś takiego:
<asp:RegularExpressionValidator ID="regexEmailValid" runat="server" ValidationExpression="\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*" ControlToValidate="tbEmail" ErrorMessage="Invalid Email Format"></asp:RegularExpressionValidator>
Zapobieganie XSS jest inny problem z sprawdzanie poprawności wprowadzonych danych.
Jeśli chodzi o XSS: Nie powinieneś próbować sprawdzać wejścia dla XSS lub pokrewnych exploitów. Powinieneś zapobiegać exploitom XSS, iniekcjom SQL itd., Uciekając poprawnie podczas wstawiania napisów do innego języka, gdzie niektóre znaki są "magiczne", np. Podczas wstawiania napisów w HTML lub SQL. Na przykład nazwa taka jak O'Reilly jest całkowicie poprawnym wprowadzeniem, ale może spowodować awarię lub, co gorsza, wstawienie z powrotem do kodu SQL. Nie można zapobiec tego rodzaju problemom, sprawdzając poprawność danych wejściowych.
Walidacja danych wprowadzanych przez użytkownika ma sens, aby zapobiec brakowi lub zniekształceniu danych, np. użytkownik piszący "asdf" w polu zip-code i tak dalej. Wrt. adresy e-mail, składnia jest tak skomplikowana, że nie zapewnia wiele korzyści do sprawdzenia poprawności za pomocą wyrażenia regularnego. Sprawdź, czy zawiera znak "@".
Można użyć walidatora RegularExpression. Właściwość ValidationExpression ma przycisk, który można nacisnąć w panelu właściwości programu Visual Studio, który otrzymuje listę wielu użytecznych wyrażeń. Jedna ich używać adresów e-mail to:
\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*
Należy pamiętać, że nie obejmuje to niektórych ważnych adresów e-mail. – Sam
Members, że jest to prawdziwy adres e-mail jest znacznie trudniejsze.
Wyrażenie regularne w celu potwierdzenia poprawności składni może być bardzo długie (patrz np. http://www.regular-expressions.info/email.html). Najlepszym sposobem potwierdzenia adresu e-mail jest wysłanie wiadomości e-mail do użytkownika i poproszenie użytkownika o odpowiedź, klikając łącze, aby potwierdzić otrzymanie wiadomości e-mail (sposób działania większości systemów rejestracji).
W naszym kodzie mamy konkretny walidator odziedziczony po klasie BaseValidator.
Klasa ta ma następujące brzmienie:
To jest najbliższy weryfikator bez faktycznego wysłania wiadomości e-mail z potwierdzeniem.
Jak to działa w praktyce? Nie uważasz, że wyszukiwanie DNS jest wolne? –
Oto podstawowy weryfikator wiadomości e-mail, który właśnie utworzyłem w oparciu o pomysł Simona Johnsona. Wymaga tylko dodatkowej funkcjonalności wyszukiwania DNS, jeśli jest wymagana.
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;
}
}
}
Należy pamiętać, że nie obejmuje to niektórych ważnych adresów e-mail. – Sam
'|' w klasie znaków '[a-z | 0-9 |]' wydaje się błędne. Czy wiesz, że to będzie pasowało do znaku '|' i nie działa jako alternatywa? Poza tym nie powiodło mi się to na mój adres e-mail (test z adresem [email protected] lub [email protected]), więc jest to oczywiście błędne. – ygoe
Zawsze powinieneś również wykonać walidację po stronie serwera.
public bool IsValidEmailAddress(string email)
{
try
{
var emailChecked = new System.Net.Mail.MailAddress(email);
return true;
}
catch
{
return false;
}
}
Powiedział, że to ASP.NET 1.1, czy kontrole sprawdzania poprawności są obsługiwane w tej wersji? – Shimmy
RegularExpressionValidators są dostępne w ASP.NET 1.1 http://msdn.microsoft.com/en-us/library/eahwtc9e%28v=VS.71%29.aspx – Diskdrive
Używam tego wyrażenia, ale dziwnie wydaje się dopuszczać puste e-maile ......? Musiałem również dodać wymagany walidator pól. – UmaN