SQL Injecties

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Angelino

Angelino

15/01/2009 18:53:00
Quote Anchor link
Ik las net op internet over SQL Injecties.
Hoe kan je dit precies tegen gaan?
 
PHP hulp

PHP hulp

20/11/2024 08:30:12
 
Frank -

Frank -

15/01/2009 18:55:00
Quote Anchor link
Welke database gebruik je?

PostgreSQL: Gebruik de functie pg_query_params() om de query en de parameters naar de database te sturen.

MySQL: Gebruik ALTIJD!!!! de functie mysql_real_escape_string() om variabelen te beveiligen, er mag niet één variabele zonder beveiliging in een query terechtkomen.

Alternatief: Gebruik PDO en bindParam() om variabelen in de queries te zetten.

Andere databases: RTFM
 
Angelino

Angelino

15/01/2009 19:06:00
Quote Anchor link
Ik gebruik een mysql database heb je mss ook een voorbeeld? Bvb
Gewijzigd op 01/01/1970 01:00:00 door Angelino
 
Frank -

Frank -

15/01/2009 19:10:00
Quote Anchor link
Zie de vele vele tutorials..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

// maak een verbinding met de database en dan ergens in je code:

$query = "
SELECT
  kolomnaam
FROM
  tabelnaam
WHERE
  id = "
.mysql_real_escape_string($_GET['id']);
$result = mysql_query($query);
// etc
?>

Variabelen mogen dus NOOOOOOOIT zonder mysql_real_escape_string() in een query komen te staan. Doe je dat wel, dan zoek je problemen en moet je niet gaan klagen wanneer een klein ettertje jouw website heeft gehackt. Daar heb je zelf om gevraagd. Eigen schuld, dikke bult.

Ps. Zet magic_quotes uit, die rotzooi zorgt voor ellende. Zie de php-handleiding hoe je dat doet. Met versie 6 zal PHP deze ellende eruit slopen, ze hebben het licht gezien.
 
Erwin Geen

Erwin Geen

15/01/2009 19:12:00
Quote Anchor link
Je kan met PDO toch ook $db->quote($var); gebruiken?
 
Frank -

Frank -

15/01/2009 19:17:00
Quote Anchor link
Klopt, maar daar kun je geen prepared statements mee maken. En die zijn wel zo handig en veilig.
 
Erwin Geen

Erwin Geen

15/01/2009 19:27:00
Quote Anchor link
Ik zie het voordeel er (nog) niet van in.
Het script wordt toch alleen maar langer met prepared statements?
 
Frank -

Frank -

15/01/2009 19:35:00
Quote Anchor link
Warchief schreef op 15.01.2009 19:27:
Ik zie het voordeel er (nog) niet van in.
Het script wordt toch alleen maar langer met prepared statements?
Er bestaan betere argumenten dan alleen de lengte van een script...

Wat zegt de lengte van een script? Niks, noppes, nada. Wat wil je hier dan mee zeggen?
 
Joren de Wit

Joren de Wit

15/01/2009 19:35:00
Quote Anchor link
pgFrank schreef op 15.01.2009 19:10:
Variabelen mogen dus NOOOOOOOIT zonder mysql_real_escape_string() in een query komen te staan.
Er zijn natuurlijk gevallen waarin dat wel zou kunnen. Zoals wanneer je die variabelen vooraf controleert:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
if(isset($_GET['id']) && ctype_digit($_GET['id']))
{

  $sql = "
    SELECT kolomnaam
    FROM tabelnaam
    WHERE id = "
.$_GET['id'];
}

?>

Maar goed, uitzonderingen bevestigen de regel ;-)
Gewijzigd op 01/01/1970 01:00:00 door Joren de Wit
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.