Øvelse 20 – Inputvalidering med model binding & C# attributter
Source code
public class PersonDTO
{
[NotNull]
[MaxLength(20, ErrorMessage = "Firsname må maks være 20 karakterer langt.")]
[MinLength(3, ErrorMessage = "Firstname skal være mindst 3 karaktere langt.")]
[RegularExpression(@"^[A-Za-zÆØÅæøå]+$", ErrorMessage = "Firsname må kun indholde små og store bogstaver fra a-å")]
public string Firstname { get; set; }
[NotNull]
[StringLength(20, MinimumLength = 3, ErrorMessage = "Lastname skal være mellem 3 og 20 karaktere langt.")]
[RegularExpression(@"^[A-Za-zÆØÅæøå]+$", ErrorMessage = "Firsname må kun indholde små og store bogstaver fra a-å")]
public string Lastname { get; set; }
}
Reflekterende spørgsmål
- Hvad er fordelene ved at anvende model binding og attributter til inputvalidering frem for manuel validering?
Fordelen her er at valideringen lever inde i selve model klassen, dermed kan en entitet altid tjekkes mod de samme regler som er defineret derinde og de skal kun rettes et sted hvis de skal ændres.
- Hvordan kan model binding forbedre sikkerheden i en webapplikation?
Systemet sørger automatisk for at der ikke kan komme flere indput ind end det som modellen indeholder. Det er dog vigtigt at man bruger DTO'er for kun at tillade de input felter man skal bruge og samtidigt kun sende de data afsted igen som er nødvendige.
- Hvordan håndteres fejl og feedback til brugeren, når en model ikke validerer?
I denne applikation håndteres det ikke rigtigt, man får kun at vide om navnet er gyldigt eller ugyldigt, men ikke hvorfor det evt. er ugydligt. Hvis man istedet kunne returnere og brugte fejlbeskederne direkte fra model klassen, så ville man få ensartede fejlbeskeder og dermed feedback igennem hele systemet.
- Kan model binding alene sikre applikationen mod alle typer angreb? Hvorfor/hvorfor ikke?
Nej, det hjælper kun til mere sikker modtagelse, konvetering til ens modeller og validering. Men hvis valideringen ikke er sat rigtigt op, så vil man stadigvæk f.eks. kunne blive ramt af Stored Cross Site Scripting (XSS). Det beskytter f.eks. heller ikke mode Dos-angreb.
Kobling til standarder
| Element i øvelsen | Relateret standard / princip | Kommentar |
|---|---|---|
| Inputvalidering | ISO/IEC 27002:2022, afsnit 8.26 (applikationssikkerhed) | Anbefaler validering og integritetstjek af input til en applikation. |
| OWASP ASVS 5.0.0, kontrol 2.2 (Input Validation) | Krav om validering af data. | |
| Secure by Design (Johnsson et al.) | Understreger vigtigheden af at beskytte tillidsgrænser og sikre korrekt inputvalidering. |