SQL Injectie?
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'] ?>
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']);
?>
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
}
?>
Gewijzigd op 01/06/2010 10:54:43 door Tim Kampherbeek
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
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.
wildcard op.
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 Karl, geef dan ook gelijk aan waarom je geen wildcard moet selecteren ;-)