SQL Injectie?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Sacha de besten

sacha de besten

01/06/2010 00:52:33
Quote Anchor link
Beste webmaster

ik gebruik voor mijn pagina's van mijn website te opennen deze onderstaande php functie is deze veilig tegen sql injectie ?

alvast bedankt

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
$id
     = htmlentities($_GET['id']);
$query     = "SELECT * FROM `paginas` WHERE `id` = " .$id;
$result = mysql_query($query) or trigger_error( mysql_error() );
$rij     = mysql_fetch_assoc($result);
?>


            <h1><?php echo $rij['pagina_naam'] ?></h1>

            <?php echo $rij['pagina_tekst'] ?>
 
PHP hulp

PHP hulp

24/12/2024 15:15:10
 
B a s
Beheerder

B a s

01/06/2010 00:59:04
Quote Anchor link
Nee dat is niet echt veilig..

Je kunt het beste eerste checken of $_GET['id'] numeriek is;

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php
if (!empty($_GET['id']) && is_numeric($_GET['id']))
{

  // ...
}
else
{
  // niet numeriek
}
?>


Om vervolgens je SQL query te doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query
= "SELECT * FROM `paginas` WHERE id = " . mysql_escape_string($_GET['id']);
?>
 
Sacha de besten

sacha de besten

01/06/2010 01:01:34
Quote Anchor link
alvast dank voor de tip
is dit dan de juiste code

alvast zeer wel bedankt

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
15
16
17
18
<?php
if (!empty($_GET['id']) && is_numeric($_GET['id']))
{

$id     = htmlentities($_GET['id']);
$query     = "SELECT * FROM `paginas` WHERE `id` = " .$id;
$result = mysql_query($query) or trigger_error( mysql_error() );
$rij     = mysql_fetch_assoc($result);
?>


            <h1><?php echo $rij['pagina_naam'] ?></h1>

            <?php echo $rij['pagina_tekst'] ?>
}
else
{
  // niet numeriek
}
?>

 
Tim Kampherbeek

Tim Kampherbeek

01/06/2010 06:30:35
Quote Anchor link
empty
Gewijzigd op 01/06/2010 10:54:43 door Tim Kampherbeek
 
Steff   an

Steff an

01/06/2010 09:13:51
Quote Anchor link
@Tim
Grapjas, wat als '$secure_int' leeg is of alleen maar tekens bevat, dan geeft de functie niks terug en wordt de query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT `blaat` FROM `blaten` WHERE `blaat` = ''

Beetje zinloze query wordt het dan.

Daarnaast zou ik geen filter_var gebruiken, maar iets als ctype_digit om te controleren of je string alleen maar cijfers bevat. Géén is_numeric, want die laat dingen als '1e6', '0xAA', '7.6' ook door.

@Hispka Of dat nu zo'n mooie oplossing is :P
Gewijzigd op 01/06/2010 09:15:30 door Steff an
 
Hipska BE

Hipska BE

01/06/2010 09:13:54
Quote Anchor link
In dit specifieke geval volstaat het om enkel dit te doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$query
= "SELECT * FROM paginas WHERE id = " .(int)$_GET['id'];
?>
 
Sacha de besten

sacha de besten

01/06/2010 23:42:44
Quote Anchor link
zou dit beter zijn

alvast dank

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$id
     = $_GET['id'];
$query = "SELECT * FROM paginas WHERE id = " .(int)$_GET['id'];
$result = mysql_query($query) or trigger_error( mysql_error() );
$rij     = mysql_fetch_assoc($result);
?>
 

01/06/2010 23:49:34
Quote Anchor link
Je hoeft niet die variabele te kopiëren als je het op Hipska's manier doet, zijn code zou je kunnen gebruiken.
 
Wolf Wolf

Wolf Wolf

02/06/2010 23:39:07
Quote Anchor link
En Sacha het is ook beter om geen backticks ` meer te gebruiken in je code.
 

02/06/2010 23:42:18
Quote Anchor link
Owja, je wilt ook geen * gebruiken, maar je geeft gewoon aan welke velden je wilt hebben. Anders kan de database je gewoon ook lekker velden niet geven, want je haalt toch maar een wildcard op.
 
Chris -

Chris -

03/06/2010 09:18:08
Quote Anchor link
Karl, geef dan ook gelijk aan waarom je geen wildcard moet selecteren ;-)
 



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.