⊗ppSpPDQu 58 of 83 menu

Problemy zapytań w PDO w PHP

Jak już powinieneś wiedzieć, zapytania SQL są podatne na iniekcje SQL. Rozszerzenie PDO ma na celu zwalczanie iniekcji, ale domyślnie, samo z siebie, tego nie robi.

Przyjrzyjmy się problemowi na przykładzie. Załóżmy, że mamy następujące zapytanie, do którego wstawiana jest zmienna:

<?php $sql = "SELECT * FROM users WHERE id=$id"; $res = $pdo->query($sql); ?>

Załóżmy, że nasza zmienna pochodzi skądś z zewnątrz, na przykład z parametru GET. Dla uproszczenia, jednak, po prostu ustawmy jej wartość ręcznie. Oczekujemy pewnej numerycznej wartości, na przykład takiej:

<?php $id = 1; ?>

Złośliwy haker, jednak, może przekazać następującą wartość (przyjmijmy, że mamy pole role):

<?php $id = '-1 OR role="admin"'; ?>

Okazuje się, że chcieliśmy następujące zapytanie:

<?php $sql = "SELECT * FROM users WHERE id=1"; $res = $pdo->query($sql); ?>

A otrzymaliśmy następujące, które wyciąga administratora strony:

<?php $sql = "SELECT * FROM users WHERE id=-1 OR role="admin""; $res = $pdo->query($sql); ?>

Aby uniknąć takiej sytuacji, w PDO przewidziano specjalny mechanizm, który nazywa się zapytania przygotowane. Będziemy je omawiać w następnej lekcji.

Celowo dokonaj iniekcji SQL do swojej bazy danych.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć