onsdag 5 januari 2011

Hur funkar IndexOfAny(Char[])?

Jag vill se till att användare inte skriver tecknet "<" i indata. Hur gör man det i C#? Min första tanke var
men det ger felet "No overload för method 'IndexOfAny' takes 0 argument."

Vad betyder det? Och hur ska man göra i stället?

Under letandet efter svar hittar jag några webbar som verkar bra:
csharpskolan.se
Using Regular Expressions with The Microsoft .NET Framework

Så jag prövar denna metod i stället för IndexOfAny.

När jag testar koden med ett mindre än tecken i rubriken kommer meddelandet A potentially dangerous Request.Form value was detected from the client.... För att ge användaren ett begripligt besked måste koppla bort denna funktion och ersätta den med en egen.

Det gör man genom att lägga in httpRuntime requestValidationMode="2.0" i httpRuntime configuration. Närmare förklaring ska finnas på sidan Request Validation - Preventing Script Attacks. Följer instruktionerna men det funkar ändå inte.

Så plötsligt hittar jag en smart sida som hjälper en att publicera kod i bloggar. Riktigt smart. Här är den aktuella koden:
Headline.Text = Headline.Text.Trim(); //Ta bort leading och trailing blanks
Regex regex = new Regex("<", RegexOptions.IgnoreCase); //Anger sökt tecken
MatchCollection matches = regex.Matches(Headline.Text); //Söker, ger antal träffar
if (matches.Count > 0) {
  Message.Text += "Tecknet < får inte användas i rubriken. ";
  Error = 1;
}

Varför funkar inte spärren mot Request Validation? Beskrivningen säger att den gäller  ASP.NET 1.1 and ASP.NET 2.0. Kan det vara orsaken? I meddelandet står det

To allow pages to override application request validation settings, set the requestValidationMode attribute in the httpRuntime configuration section to requestValidationMode="2.0". Example: <httpRuntime requestValidationMode="2.0" />.


Var finns "httpRuntime configuration section"? Här är MSDNs beskrivning.

Det är inte bara jag som har detta problem visar det sig. Lösningen kom på plats efter att jag läst dotnetguts. Så här ska det aktuella avsnittet i Web.Config se ut:

  <system.web>
    <httpRuntime requestValidationMode="2.0" />
    <pages validateRequest="false" />


Nästa uppgift blir att kolla om det finns andra otillåtna tecken i rubriken.

Inga kommentarer:

Skicka en kommentar