From 2ef5c3aafcbf5f91ff5723d8eaad493d76f87d37 Mon Sep 17 00:00:00 2001 From: Paul Wagener Date: Thu, 10 Mar 2016 08:18:24 +0100 Subject: [PATCH] Update sql.html --- templates/sql.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/sql.html b/templates/sql.html index f969dad..55848ad 100644 --- a/templates/sql.html +++ b/templates/sql.html @@ -56,7 +56,7 @@ SELECT naam FROM leden WHERE id=0; DROP TABLE leden; -

Met ; geven we aan dat we een nieuwe query beginnen, waarna we vervolgens vrij zijn om elke query uit te voeren die we maar willen. Let wel dat het uitvoeren van meerdere queries met bijvoorbeeld mysqli_query() is iets wat standaard uit staat. Deze techniek is extra gevaarlijk omdat deze immuun is tegen escapen als het invoer is die niet tussen quotejes staat.

+

Met ; geven we aan dat we een nieuwe query beginnen, waarna we vervolgens vrij zijn om elke query uit te voeren die we maar willen. Let wel dat het uitvoeren van meerdere queries met bijvoorbeeld mysqli_query() iets is wat standaard uit staat. Deze techniek is extra gevaarlijk omdat deze immuun is tegen escapen als het invoer is die niet tussen quotejes staat.

UNION
@@ -69,13 +69,13 @@

Countermeasures

-

Het is niet moeilijk om bovenstaande aanvallen te voorkomen, met een paar simpele aanpassingen kan je ervoor zorgen dat je SQL altijd wordt uitgevoerd zoals je die bedoeld hebt.

+

Het is niet moeilijk om bovenstaande aanvallen te voorkomen. Met een paar simpele aanpassingen kan je ervoor zorgen dat je SQL altijd wordt uitgevoerd zoals je die bedoeld hebt.

Stored procedures

Je slaat de SQL op als stored procedure in de database en roept deze aan vanuit je code. Omdat de SQL in de database staat in plaats op de server is SQL injectie niet mogelijk

Prepared statements
-

De meest gebruikte veilige manier, met vraagtekentjes geef je aan op welke plekken de invoer moet komen en vul die later in. De SQL wordt altijd uitgevoerd zoals je hem hebt bedoeld, en ook hier is SQL injectie onmogelijk. Lees hier verder

+

Dit is de meest gebruikte en veilige manier. Met vraagtekentjes geef je aan op welke plekken de invoer moet komen en die vul je dan later in. De SQL wordt altijd uitgevoerd zoals je hem bedoeld hebt. En ook hier is SQL injectie onmogelijk. Lees hier verder

Escaping

Je kan ook alle invoer zelf escapen met functies zoals mysqli_real_escape_string(). Zorg ervoor dat je dan consequent alle strings escaped met die functie en alle getallen cast naar int's voordat je ze in je SQL plakt. Als je er ook maar eentje mist heb je al een SQL injection mogelijkheid op je website!

@@ -123,7 +123,7 @@

Hint: Maak er een query van die alle gebruikers teruggeeft, de site logt dan in als de eerste gebruiker. Het maakt voor de opdracht niet uit als wie je inlogt.

- Bekijk de PHP broncode en los het probleem op. Type de regels code die je verbeterd hebt in onderstaand tekstveld. (denk terug aan je mysql WEBS2 practicum) + Bekijk de PHP broncode en los het probleem op. Type de verbeterde regels code in onderstaand tekstveld. (denk terug aan je mysql WEBS2 practicum) {% include "points.html" with points=answers.answer_sql_fix_query.points max="15" %}