[ProjDB] Belangrijk: Beschermen tegen SQL Injection

Forum van 2de Bachelor Informatica.

Moderator: Praesidium

Glenn
Posts: 280

[ProjDB] Belangrijk: Beschermen tegen SQL Injection

Post#1 » Tue Nov 27, 2012 11:10 pm

Hallo allemaal,

Bij deze wil ik iedereen die het vak programming project databases volgt er willen op wijzen dat ze hun applicatie moeten beschermen tegen de bekendste database attack, namelijk SQL injection. Blijkbaar kwam dit vorig jaar niet aan bod in deze cursus, wat dus zou betekenen dat er informatici kunnen afstuderen die applicaties maken die vatbaar zijn voor SQL Injection.

Om te weten wat SQL injection is, lees: http://en.wikipedia.org/wiki/SQL_injection

Je beschermen tegen SQL Injection kan je op twee manieren:

1) Maak gebruik van een functie die 'gevaarlijke' karakters wegfiltert uit een reeks user input. In PHP kan dit bijvoorbeeld met de functie mysql_real_escape_string() die speciaal gemaakt is om SQL injectie te verhinderen. Roep deze functie op op elke user input die je gebruikt in een query. Ook als de input bijvoorbeeld een niet gevaarlijke operatie is zoals bijvoorbeeld het opvragen van details over een bepaald product in een webshop.

2) De eerste optie is niet altijd mogelijk in elke programmeertaal. Een andere optie is gebruik maken van prepared statements. Door een prepared statement aan te maken, ligt de structuur van je query vast, zodat deze via een SQL injection attack niet kan aangepast worden. Op deze manier ben je evengoed beveiligd tegen SQL injection.

Bij deze zou ik willen vragen of van deze post een sticky kan gemaakt worden. Deze informatie is essentieel voor iedereen die programmeert met databases. Anders zouden er afgestudeerde bachelor/master-studenten kunnen zijn die applicaties schrijven voor een bedrijf waarvan de database direct gehackt kan worden.

Daarnaast zou ik willen vragen dat elk jaar deze informatie verspreid wordt onder de 2de jaar informatica (via facebook, vertellen tegen elkaar, ...). Deze informatica is echt essentieel voor iedereen die programmeert met databases. De post kan verwijderd worden indien deze topic terug tot het bachelorcurriculum zou behoren.

Groeten,
Glenn

User avatar
Bob
WOZ
Posts: 367

Re: [ProjDB] Belangrijk: Beschermen tegen SQL Injection

Post#2 » Wed Nov 28, 2012 8:02 am

Ik heb vermoedens omtrent wat een prepared statement is maar zou het moeten opzoeken om zeker te zijn. Kan je dit kort toelichten nog?

Glenn
Posts: 280

Re: [ProjDB] Belangrijk: Beschermen tegen SQL Injection

Post#3 » Wed Nov 28, 2012 12:21 pm

Een prepared statement is een statement waarvan je op voorhand door je query processor de structuur laat maken. Pas nadat de structuur is aangemaakt, geef je de input-waarden mee aan de query. Hieronder een voorbeeld van een prepared statement in Java en PHP (overgenomen van wikipedia).

Java:

Code: Select all

java.sql.PreparedStatement stmt = connection.prepareStatement(
               "SELECT * FROM users WHERE USERNAME = ? AND ROOM = ?");
stmt.setString(1, username);
stmt.setInt(2, roomNumber);
stmt.executeQuery();


PHP:

Code: Select all

$stmt = $dbh->prepare("SELECT * FROM users WHERE USERNAME = ? AND PASSWORD = ?");
$stmt->execute(array($username, $password));


Meer informatie kan je vinden op: http://en.wikipedia.org/wiki/Prepared_statement.

User avatar
PowerToTheUsers
WOZ
Posts: 200

Re: [ProjDB] Belangrijk: Beschermen tegen SQL Injection

Post#4 » Wed Nov 28, 2012 10:20 pm

Glenn wrote:Een prepared statement is een statement waarvan je op voorhand door je query processor de structuur laat maken. Pas nadat de structuur is aangemaakt, geef je de input-waarden mee aan de query. Hieronder een voorbeeld van een prepared statement in Java en PHP (overgenomen van wikipedia).

Java:

Code: Select all

java.sql.PreparedStatement stmt = connection.prepareStatement(
               "SELECT * FROM users WHERE USERNAME = ? AND ROOM = ?");
stmt.setString(1, username);
stmt.setInt(2, roomNumber);
stmt.executeQuery();


als username dan zoiets met " ' DROP TABLE" is, hebt ge toch nog altijd een probleem?
WINAK Schacht 2001-2002
WINAK VU 2002-2003
WINAK Feest 2003-2004
WINAK Vice-praeses 2004-2005
WINAK Quaestor 2005-2006
WINAK Peter 2006-2008
WINAK liefhebber 2001-... ;)

Glenn
Posts: 280

Re: [ProjDB] Belangrijk: Beschermen tegen SQL Injection

Post#5 » Wed Nov 28, 2012 11:18 pm

Een prepared statement is veilig ze. Die maakt gewoon die structuur om die query te processen op voorhand aan, zodat er geen DROPS etc. meer kunnen gebeuren. Die heeft gewoon al een structuur aangemaakt (een manier waarop hij de query moet processen) en die manier ligt al vast. Als er geen DROP zat in de structuur die je had opgesteld, zal je prepared statement nooit kunnen droppen.

Om het met de woorden van wikipedia te zeggen:
Prepared statements are resilient against SQL injection, because parameter values, which are transmitted later using a different protocol, need not be correctly escaped. If the original statement template is not derived from external input, SQL injection cannot occur.

User avatar
racekakje
WOZ
Posts: 740
Contact:

Re: [ProjDB] Belangrijk: Beschermen tegen SQL Injection

Post#6 » Mon Dec 16, 2013 7:51 pm

Glenn wrote: Blijkbaar kwam dit vorig jaar niet aan bod in deze cursus, wat dus zou betekenen dat er informatici kunnen afstuderen die applicaties maken die vatbaar zijn voor SQL Injection.


MIND = BLOWN

User avatar
Joachimvdh
Prosenior
Posts: 1090
Contact:

Re: [ProjDB] Belangrijk: Beschermen tegen SQL Injection

Post#7 » Tue Dec 17, 2013 8:51 am

PowerToTheUsers wrote:
Glenn wrote:Een prepared statement is een statement waarvan je op voorhand door je query processor de structuur laat maken. Pas nadat de structuur is aangemaakt, geef je de input-waarden mee aan de query. Hieronder een voorbeeld van een prepared statement in Java en PHP (overgenomen van wikipedia).

Java:

Code: Select all

java.sql.PreparedStatement stmt = connection.prepareStatement(
               "SELECT * FROM users WHERE USERNAME = ? AND ROOM = ?");
stmt.setString(1, username);
stmt.setInt(2, roomNumber);
stmt.executeQuery();


als username dan zoiets met " ' DROP TABLE" is, hebt ge toch nog altijd een probleem?

Nee, want die query is op dat moment al uitgevoerd :)

User avatar
slimmy
Prosenior
Posts: 3130
Contact:

Re: [ProjDB] Belangrijk: Beschermen tegen SQL Injection

Post#8 » Fri Jan 10, 2014 8:58 am

Johan toch!

Return to “2de Bachelor”

Who is online

Users browsing this forum: No registered users and 1 guest

cron