2010-09-02 13 views
5

Mam kilka pól tekstowych w formularzu sieciowym ASP.NET. Chcę się upewnić, że użytkownicy są , a nie wprowadzają kod HTML do tych pól tekstowych. Nie jestem jednak pewien, jak zapobiec wprowadzaniu kodu HTML. Z tego powodu zdecydowałem, że chcę dopuszczać tylko znaki alfanumeryczne, spacje, wykrzyknik, ostry znak, znaki dolara, znaki procentowe, wskazówki, gwiazdki oraz lewy i prawy nawias. Pomijam ampersand, ponieważ nie chcę, aby wprowadzano coś takiego jak "< skrypt &rt; ..."Jak zapobiec wprowadzaniu kodu HTML do pola formularza sieci Web ASP.NET

Jak to zrobić? Czy robię to we właściwy sposób?

Dziękujemy!

+0

Niezależnie od wybranej metody, sprawdź poprawność danych wejściowych zarówno na kliencie, jak i na serwerze - sprawdzanie poprawności klienta można ominąć za pomocą debugera javascript. –

Odpowiedz

1

Sprawdźcie tutaj http://msdn.microsoft.com/en-us/library/ff649310.aspx

Można umieścić oświadczenie koc w config WWW ValidateRequest = true będzie sprawdzić wszystkie dane wprowadzone przez użytkownika i wygeneruje błąd, jeśli użytkownik wkłada coś ze złych znaków.

Jeśli chcesz zezwolić na niektóre tagi HTML, musisz wykonać własne.

+0

+1 jest wbudowane ... (oczywiście z obsługą błędu). –

+0

-1: Nie wierzę, że wyrzucanie błędów/wyjątków dla użytkowników jest dobrą praktyką. A ValidateRequest = true nie obejmuje wszystkich form zapobiegania XSS, jeśli taka jest intencja. –

+0

@Caspar Kleijne czy możesz podać kilka odniesień do ValidateRequest nie obejmujących wszystkich form XSS? Jestem ciekawy o tym czytać. Pomyślałem, że microsoft wykonałby lepszą robotę przy złapaniu wszystkich przypadków niebezpiecznego wkładu użytkownika lepiej niż ja/lub przeciętny programista mógł sam wywindować. –

1

Strona domyślnie uniemożliwi użytkownikom publikowanie HTML lub skryptów w polach tekstowych lub tekstowych. Zobacz MSDN

0

Można użyć metody czyszczenia kodu HTML z wejściem jak:

public static string ClearHTML(string Str, Nullable<int> Character) 
{ 
    string MetinTxtRegex = Regex.Replace(Str, "<(.|\n)+?>", " "); 

    string MetinTxtSubStr = string.Empty; 

    if (Character.HasValue) 
    { 
     if (MetinTxtRegex.Length > Character) 
     { 
      MetinTxtSubStr = MetinTxtRegex.Substring(0, Character.Value); 
      MetinTxtSubStr = MetinTxtSubStr.Substring(0, MetinTxtSubStr.LastIndexOf(" ")) + "..."; 
     } 
     else 
     { 
      MetinTxtSubStr = MetinTxtRegex; 
     } 
    } 
    else 
    { 
     MetinTxtSubStr = MetinTxtRegex; 
    } 
    return MetinTxtSubStr; 
} 
0

Użyłem:

HttpUtility.HtmlEncode(); 

Więcej informacji here.

Powiązane problemy