PDO a Sql Injection - całkowite zabezpieczenie?


(Danpasall) #1

Pytanie jest proste czy biblioteka PDO całkowicie elminuje ataki sql injection ??? Sądze ,że tak ,niemniej jednak chciałbym się upewnić :slight_smile: z góry dzięki


(Airborn) #2

Nic nie jest całkowicie bezpieczne jeżeli nie jest wykorzystane prawidłowo, natomiast prawidłowo napisany skrypt będzie bezpieczny niezależnie od tego czy użyjesz PDO czy też nie.


(Danpasall) #3

Dobra podam konkretny przykład:

<?php

$pdo=new PDO('...');

$stmt=$pdo->prepare('SELECT * FROM tabela WHERE id=:imie');

$stmt->bindParam(':imie',$_POST['imie'],PDO::PARAM_STR);

$stmt->execute();

...

?>

Bardzo ładnie brzmi twoja odpowiedź itd ... Pytam konkretnie ,czy znasz jakis atak sql injection który powoduje jakieś awarie na przykładowym kodzie ? Pytam czy PDO w 100% blokuje te ataki ? Czy może znasz/cie jakieś inne o których ja nie słyszałem ? Czy moge zażegnąć strach przed nieprawidłowymi danymi poprzez użycie WŁAŚNIE PDO ?


(Elektrrrus) #4

Ogólnie mówiąc użycie bindowania praktycznie eliminuje możliwość sql injection, bo rozgranicza samo zapytanie od danych podłączanych do niego, przez co dane nie mogą zmodyfikować samego zapytania.

Ja mimo wszytsko wole stosować podwójną ostrożność i nie polecałbym podpinać dane bezpośrednio z $_POST.

Mogę one być skażone same w sobie i zawierać np. jakiś złośliwy kod javascriptu, co może doprowadzić do ataku code injection.

Zawsze warto przefiltrować dane napływające od użytkownika, chociażby przez przepuszczenie przez odpowiednie wyrażenie regularne, strip_tags() itd.