⊗ppSpPDQu 58 of 83 menu

Праблемы запытаў у PDO ў PHP

Як вы ўжо павінны ведаць, SQL-запыты ўразлівыя для SQL-ін'екцый. Пашырэнне PDO прызначана для барацьбы з ін'екцыямі, але проста так, па змаўчанні, яно гэтага не робіць.

Давайце паглядзім на праблему на прыкладзе. Хай у нас ёсць наступны запыт, у які ўстаўляецца зменная:

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

Хай наша зменная прыходзіць аднекуль звонку, напрыклад, з GET-параметра. Для прастаты, аднак, давайце проста зададзім яе значэнне ўручную. Мы чакаем нейкае лікавае значэнне, напрыклад, такое:

<?php $id = 1; ?>

Зласны хакер, аднак, можа перадаць наступнае значэнне (лічым, што ў нас ёсць поле role):

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

Атрымліваецца, што мы хацелі наступны запыт:

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

А атрымалі наступны, які выцягвае адміністратара сайта:

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

Каб пазбегнуць такой сітуацыі, у PDO прадугледжаны спецыяльны механізм, які называецца падрыхтаваныя запыты. Іх мы будем разбіраць у наступным уроку.

Наўмысна ажыццявіце SQL-ін'екцыю да вашай базы.

Беларуская
AfrikaansAzərbaycanБългарскиবাংলাČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць