hulp gezocht voor beveiligen tegen sql injection

  • hallo ik had graag dit stukje willen beveiligen tegen sql injection maar ik kom er ni uit wat of waar ik alles moet zetten


  • Guest, wil je besparen op je domeinnamen? (ad)
  • moet je dan dit google prepared statements php of sql injection er zijn zo veel dingen maar daar ken ik niks van da trekt allemaal op elkaar en dan weet ik nog niet of ik het goed heb gedaan


    kan je niks in .httacces zetten voor alles te beveiligen
    alleen weet ik niet wat

  • Beste ,


    Je kan ook gebruik maken van
    http://php.net/manual/en/funct…ql-real-escape-string.php.


    Er staat letterlijk bovenaan:


    "Warning: This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include: mysqli_real_escape_string() PDO::quote()"


    Dit betekend dat als je dit nu gebruikt in een script, het binnen een aantal PHP versies niet meer zal worden ondersteund. Het word dus sterk afgeraden om deze extentie op dit moment nog te gebruiken.

  • Er staat letterlijk bovenaan:


    "Warning: This extension is deprecated as of PHP 5.5.0, and will be removed in the future. Instead, the MySQLi or PDO_MySQL extension should be used. See also MySQL: choosing an API guide and related FAQ for more information. Alternatives to this function include: mysqli_real_escape_string() PDO::quote()"


    Dit betekend dat als je dit nu gebruikt in een script, het binnen een aantal PHP versies niet meer zal worden ondersteund. Het word dus sterk afgeraden om deze extentie op dit moment nog te gebruiken.



    "Bedankt cas had ik inderdaad niet gezien "
    Maar als je hier boven kijkt naar de code zien je dat hij veelvuldig gebruik maakt van mysql_query die gelijk tijdig er uit gaat.
    Het is natuurlijk niet de beste manier die ik heb gegeven maar het is wel een manier om het doen.


    Ik zal me daarom even aanvullen.
    Mysql_query gaat in php 6 verdwijnen als je script wil die nog jaren mee kan dan zal je het geheel moeten veranderen.


    Je kan hier voor
    http://www.php.net/manual/en/mysqli.query.php gebruiken
    of
    http://www.php.net/class.pdo


    Met vriendelijke groet,
    rick van beek

  • Inderdaad zoals rick al aangeeft, PDO. Hier hoef je je namelijk al een stuk minder druk te maken over sql injections etc. aangezien dit standaard in PDO zit. Dus wanneer je denk dat het echt nodig is om jezelf te leren hoe iets goed te beveiligen, zal ik je zeker aanraden om te kijken naar PDO.


    Het is natuurlijk altijd nodig om het goed te beveiligen, maar ik zelf acht een goede basiskennis in PHP belangrijker. Naarmate je basiskennis goed is, zul je PDO ook een stuk makkelijker begrijpen.

  • Indien je, nog door wilt gaan met het gebruiken van MySQL, dan zou ik de functie mysql_real_escape_string() samen met de trim() functie gebruiken.
    Als voorbeeld:


    PHP
    mysql_real_escape_string(trim($_POST['login']))


    http://www.php.net/trim
    http://www.php.net/manual/en/f…ql-real-escape-string.php


    Wat ik zelf en andere aanraden is om bijvoorbeeld over te stappen naar de prepared statement van bijvoorbeeld MySQLI.
    Als voorbeeld in jouw geval ongeveer:


    Bij PDO gebruik ik zelf de prepared statement met arrays:

    PHP
    <?php
    $stringCode = 'Hulp';
    $stringUrl  = 'http://icts.nl';
    
    
    					//We gaan nu verder en importeren het in de database.
                        $stmt = $db->prepare(" INSERT INTO hulp(code, redirect) VALUES (?, ?) ");
    					//In PDO is er geen real_escape_string maar de quote() functie, als je deze zonder de substr() fucntie gebruikt wordt er bijv. in de DB enkele single quotes gezet rondom de info.
    					$stmt->execute(array(substr($db->quote($stringCode), 1, -1), substr($db->quote($stringUrl), 1, -1)));
    ?>
  • Hallo,


    Stefan, exacte reden heb ik niet meer onthouden. Was dacht ik iets dat je alsnog wat met backslash of anders de gewone slash kon doen.


    Heb niet onthouden waarom niet veilig. Enkel hoe je het wel veilig doet, namelijk prepared statements. Dat is voor bijna elke taal ook beschikbaar.


    Mvg,
    Tim

  • Toelichting?


    De mysql-extensie is inderdaad deprecated en wordt vervangen met mysqli. In nieuwe ontwikkeling is het dus sterk aangeraden de tevens betere mysqli of PDO extensie te nemen.


    Deze functie is niet veilig omdat je wat Tim al zegt te maken hebt met backslashes, maar dit is niet de enige reden. Het is in mysql_real_escape_string gewoon toegestaan om nummerieken te gebruiken hierdoor kan je alsnog injecteren.


    Voorbeeld van één injectie:

    PHP
    <?php
    $id = "0; DELETE FROM users";
    $id = mysql_real_escape_string($id);
    
    
    var_dump($id);
    ?>
  • Dat klopt, maar dat heeft niets met de escape functie te maken, maar met je gebruik ervan. Zolang je het resultaat van de escape functie in je query tussen quotes zet is er niets aan de hand.


    Je zou dus kunnen stellen dat prepared statements meer idiot proof zijn. Maar zoals de bekende uitspraak luidt:


    "If you make something idiot proof, someone will just make a better idiot."

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!