is deze database query veilig genoeg?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Ama saril

ama saril

10/12/2012 15:44:25
Quote Anchor link
Ok dan laatste vraagje voor duidelijkheid:

Dit hoef ik niet te escapen met PDO::quote() omdat ik gebruik maak van de prepared statement en bindparam()
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
$sql
= "SELECT naam, adres, id FROM tbl_gebruiker where id = :id;
$stmt = $db->prepare($sql);
$stmt->bindParam(':id', $id, PDO::PARAM_STR);
$stmt->execute();
?>


Het volgende stukje zou ik wel moeten escapen met PDO::quote() als ik het zo zou doen
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php

$sql
= "SELECT naam, adres, id FROM tbl_gebruiker where id =".$_POST['id'];
$stmt = $db->prepare($sql);
$stmt->execute();
?>


Begrijp ik em zo goed?
 
PHP hulp

PHP hulp

27/12/2024 01:30:49
 
Kris Peeters

Kris Peeters

10/12/2012 15:59:42
Quote Anchor link
Strikt gezien: ja.


maar ...
Wel, om te beginnen: id is geen string, maar een int.
(Ja okay, het kan eventueel anders, maar ik denk niet in dit geval)

Dat maakt de zaak sowieso anders.

Dat wordt dus
$stmt->bindParam(':id', $id, PDO::PARAM_INT);

Integers kan je casten, met:

(int) $_POST['id']
ofwel
intval($_POST['id'])

Dat beschermt je door een getal terug te geven, wat $_POST['id'] ook moge zijn.
Als $_POST['id'] geen geldig getal is, wordt de waarde omgezet in 0; en dus niet meer gevaarlijk voor injection.

Dus:
$sql = "SELECT naam, adres, id FROM tbl_gebruiker where id =" . (int) $_POST['id'];
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

10/12/2012 16:07:23
Quote Anchor link
Wat gebeurt er als je een parameter bind die een integer hoort te zijn geen geldig getal is?
Krijg je dan een fout?
In asp.NET krijg je dat nl wel (en hoef je geen preps te gebruiken!)
 

Pagina: « vorige 1 2



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.