SQL Injectie?
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
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)
1
2
3
4
5
6
7
8
9
10
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'] ?>
$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'] ?>
Nee dat is niet echt veilig..
Je kunt het beste eerste checken of $_GET['id'] numeriek is;
Om vervolgens je SQL query te doen:
Je kunt het beste eerste checken of $_GET['id'] numeriek is;
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?php
if (!empty($_GET['id']) && is_numeric($_GET['id']))
{
// ...
}
else
{
// niet numeriek
}
?>
if (!empty($_GET['id']) && is_numeric($_GET['id']))
{
// ...
}
else
{
// niet numeriek
}
?>
Om vervolgens je SQL query te doen:
Code (php)
1
2
3
2
3
<?php
$query = "SELECT * FROM `paginas` WHERE id = " . mysql_escape_string($_GET['id']);
?>
$query = "SELECT * FROM `paginas` WHERE id = " . mysql_escape_string($_GET['id']);
?>
alvast dank voor de tip
is dit dan de juiste code
alvast zeer wel bedankt
is dit dan de juiste code
alvast zeer wel bedankt
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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
}
?>
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
}
?>
empty
Gewijzigd op 01/06/2010 10:54:43 door Tim Kampherbeek
@Tim
Grapjas, wat als '$secure_int' leeg is of alleen maar tekens bevat, dan geeft de functie niks terug en wordt de query:
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
Grapjas, wat als '$secure_int' leeg is of alleen maar tekens bevat, dan geeft de functie niks terug en wordt de query:
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
In dit specifieke geval volstaat het om enkel dit te doen:
zou dit beter zijn
alvast dank
alvast dank
Code (php)
1
2
3
4
5
6
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);
?>
$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);
?>
Je hoeft niet die variabele te kopiëren als je het op Hipska's manier doet, zijn code zou je kunnen gebruiken.
En Sacha het is ook beter om geen backticks ` meer te gebruiken in je code.
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.
Karl, geef dan ook gelijk aan waarom je geen wildcard moet selecteren ;-)




