Geplaatst door: Ramon Geplaatst op: 31-8-2003 13:08:58 Laatste update: 31-8-2003 13:11:04 Aantal keer bekeken: 104379 Formulieren en querystrings
Een belangrijk onderdeel van het maken van ASP pagina's is de beveiliging.
Je hebt natuurlijk niets aan een admin gedeelte waar iedereen alles
kan veranderen of een gastenboek waarin gevaarlijke codes van bezoekers
uitgevoerd worden. In dit artikel worden een aantal van deze beveiligingen
besproken.
Formulieren en
querystrings
Formulieren worden vaak gebruikt om de gebruiker de mogelijkheid
te geven om een reactie te plaatsen, gegevens te selecteren of bijvoorbeeld
een bestelling te plaatsen. Het gebruik van formulieren is onmisbaar,
maar brengt ook de nodige gevaren met zich mee.
Bij het verwerken van de ingevoerde gegevens moet ervoor gezorgt
worden dat de ingevoerde gegevens correct zijn en geen schadelijke
inhoud bevatten. De controle van deze gegevens is afhankelijk van
de manier waarop ze verder verwerkt worden.
HTML Injection bij formulieren Veel beginnende ASPers (en soms ook gevorderde) vergeten
wel eens dat niet alleen de gevraagde gegevens ingevuld kunnen worden,
maar ook HTML. Dit kan erg schadelijk zijn wanneer hier geen maatregelen
tegen genomen worden. We zullen een gastenboek als voorbeeld nemen.
Het formulier bevat tekstvelden waar de gebruiker zijn naam en een
bericht kan invullen. Deze gegevens worden vervolgens door een script
in de database geplaatst met de volgende SQL query.
Wanneer iemand nu het gastenboek wil bekijken zal ie niet de berichten
zien, maar word doorgestuurd naar sex.com. De mogelijkheden zijn
bijna onbeperkt. Je zou met javascript nieuwe vensters kunnen openen,
het venster laten sluiten of gekke scripts laten uitvoeren. Met
HTML kan je afbeeldingen laten zien, een iframe met een ander pagina
openen of de complete layout van een website verpesten. Je kunt
het zo gek maken als je zelf wilt, want je kan alle HTML tags invoeren.
De oplossing van dit probleem is eenvoudig. Je moet voordat je
de gegevens in de database plaatst alle HTML uit de tekst filteren.
Dit kan je op twee manieren doen:
Werken met server.HTMLEncode
Vervangen van de < en > door < en >
Met server.HTMLEncode werkt het als volgt:
naam = server.HTMLEncode(request.form("naam"))
bericht = server.HTMLEncode(request.form("bericht"))
SQL = "INSERT INTO (naam, bericht) VALUES
('" & naam & "','"
& bericht & "');"
Het vervangen werkt als volgt:
naam = request.form("naam")
bericht = request.form("bericht")
SQL = "INSERT INTO (naam, bericht) VALUES
('" & naam & "','"
& bericht & "');"
Wanneer je de originele tekst in de database wilt bewaren kan je
deze functies ook uitvoeren voordat je de gegevens toont.
Response.Write server.HTMLEncode(objRec("naam"))
HTML Injection bij querystrings Een eenvoudige manier om een foutmelding te geven is het
gebruik van een querystring. Wanneer een gebruiker een verkeerd
wachtwoord heeft opgegeven kan je de gebruiker terugsturen naar
de login pagina met een foutmelding. Dit zou als volgt kunnen:
Wanneer je nu de in de URL de tekst "Verkeerd+Wachtwoord"
vervangt door HTML code wordt dit weer in de pagina gezet. Andere
gebruikers hebben hier meestal geen last van, maar stel je voor
dat de foutmelding binnen het formulier is gezet, dus:
<form action="inloggen.asp" method="post">
If Request.Querystring("error")
<> "" Then
Response.Write Request.Querystring("error")
End If
......de rest van het formulier......
</form>
Wanneer je nu de HTML code van een nieuw formulier intypt kan je
het formulier gebruiken om achter gebruikersnamen en wachtwoorden
te komen. De code ziet er dan als volgt uit:
Maar wanneer ik een invoerveld die ik gebruik voor een zoekfunctie wil beveiligen op deze manier beveilig krijg ik dan bij invoer <i>'s morgens 'sjonge</i>
Na de replace deze waarde: ''smorgens ''sjonge
en dus bij de query gebruikersnaam='''smorgens ''sjonge'
Zoeken op de waarde <i>''smorgens ''sjonge</i> is heel wat anders als <i>'smorgens 'sjonge</i>