beveiliging van $_GET uit url

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Michiel v

michiel v

02/11/2012 09:21:43
Quote Anchor link
Vraag: Als ik een variabel uit de URL ophaal, dan vang ik deze als eerst op met een if. In de if beveilig ik de variabel met mysql_real_escape_string().
zie onderstaand:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
    //category nr ophalen van categorie.php
    if(isset ($_GET['category'])) {
        
    $categorie = mysql_real_escape_string($_GET['categorie']);
    
                        
    }
//einde
?>


Als de variabel door de bovenstaand if is gegaan, dan wordt deze ingevoerd in de onderstaande Query. VRAAG: Moet ik nu nog eens de variabel beveiligd invoeren in de query met mysql_real_escape_string(). (zie voorbeeld 1) of kan ik de variabel nu invoeren volgend Query (voorbeeld 2). ??????

P.s. Is een variabel met mysql_real_escape_string() voldoende beveiligd?


VOORBEELD 1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
    //VOORBEELD 1
    SELECT *
        
    FROM categorie WHERE categorieID = ". mysql_real_escape_string($categorie)."
        
    ";
          
?>



VOORBEELD 2

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
    //VOORBEELD 2
    SELECT *
        
    FROM categorie WHERE categorieID = $categorie
        
    ";
          
?>
 
PHP hulp

PHP hulp

22/11/2024 12:47:02
 
Chris PHP

Chris PHP

02/11/2012 10:10:36
Quote Anchor link
Wanneer je hem eerst door mysql_real_escape_string haalt (eerste code) hoef je dat natuurlijk niet nogmaals te doen met $catagorie, aangezien dat de geescapte waarde is.

Dus dan zou voorbeeld 2 voldoende moeten zijn, wanneer je de eerste if doet, en hem door mysql_real_escape_string haalt en declareerd aan $catagorie.

Is je catagorie een woord(string) of een cijfer (int)? Als het een cijfer (int) is kun je intval ($_GET['categorie']); gebruiken, dan kan het alleen maar een int zijn en geen string meer.
Gewijzigd op 02/11/2012 10:10:59 door Chris PHP
 
LEDfan nvt

LEDfan nvt

02/11/2012 10:12:45
Quote Anchor link
Je zit al in de juiste richting, maar er zijn nog enkele problemen.

1) Wat nu als $_GET['categorie'] leeg is? Dan wordt de variable $categorie niet aangemaakt, maar je gebruikt die wel in de query. Dit levert een Notice op.

2) Ik veronderstel dat category een id is, met andere woorden een integer. Wat nu als men geen integer maar een string invult? Je moet dus gaan controleren of het een integer is. http://php.net/manual/en/function.is-int.php

3) Je maakt onnodig een extra variable aan. Dit heeft totaal geen nut.

4) Wat nu als de categorie geen nummer is of niet ingevuld is, ga je dat dan zo laten en het script verder uitvoeren? Beter kan je een nette foutafhandeling maken.
Je kijkt eerst met een if of $_GET['category'] niet bestaat of dat deze leeg is. Als dat zo is dan ga je een waarde bij een array toeveogen. In dit array komen allee Errors te staan. Een array maak je als volgt aan:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$error
= array(); // Dit doe je ergens bovenaan je script
?>


Als je dan alle input velden (of $_GET variablen) hebt gecontroleerd kijk je of er waardes in het array zitten. Als er waardes inzitten laat je $error op de gebruiker zijn scherm zien, als er geen waardes inzitten dan kan je de query uitvoeren.
 
Michiel v

michiel v

02/11/2012 10:22:23
Quote Anchor link
Bedankt voor de reacties. Hier kan ik wat mee! Ik ga ermee aan de slag :-)
 



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.