SQL Injectie?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

SQL Developer / SQL DBA / Financiële instelli

Functieomschrijving Ben jij een ervaren SQL Developer / SQL DBA die houdt van een uitdaging? Heb je ruime ervaring met SQL, SQL Server, SSIS en het bouwen van queries? Lijkt het jou interessant om verantwoordelijk te zijn voor de gehele Nederlandse database omgeving van deze internationale financiële organisatie? Lees dan snel verder! Verantwoordelijk voor operationele werking van de database omgeving voor alle Nederlandse vestigingen; Schrijven van SQL queries; Beantwoorden complexe integratie vraagstukken; Meewerken aan uiteenlopende interne projecten en organisatiebrede migratie trajecten; Requirements opstellen; Fungeren als sparringspartner voor de business. Functie-eisen HBO werk- en denkniveau; Minimaal drie jaar ervaring in een

Bekijk vacature »

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

17/11/2019 06:47:06
 
Bas Kreleger
Beheerder

Bas Kreleger

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);
?>
 
Karl Karl

Karl Karl

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.
 
Karl Karl

Karl Karl

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.