SQL даги майдонлар рўйхати PHP да
Базан фойдаланувчи томонидан майдон номларини оламиз. Бундай ҳолда уларни текширишсиз сўровга киритиб бўлмайди. Фақат оқ рўйхат орқали текширилгандан сўнггина.
Ушбу зарарли мисолни кўриб чиқайлик. Бизда куйидаги сўров мавжуд деб фараз қилайлик:
<?php
$query = "SELECT id,login FROM users";
$res = mysqli_query($link, $query);
?>
Сўров натижасини куйидаги тарзда чиқарайлик деб фараз қилайлик:
<?php
for ($data = []; $row = mysqli_fetch_assoc($res); $data[] = $row);
var_dump($data);
?>
Майдон номлари GET-параметр орқали келади деб фараз қилайлик:
<?php
$fields = $_GET['fields'];
$query = "SELECT $fields FROM users";
$res = mysqli_query($link, $query);
?>
Биз фойдаланувчи куйидаги нарсани юзлашини кутямиз:
?fields=id,login
Ёмонниёт эса биз кўрсатмоқчи бўлмаган баъзи нарсаларни қўшиши мумкин:
?fields=id,login,password
Дарсда келтирилган мисолни такрорланг. Ушбу зарарлилик мавжудлигини текширинг. Уни оқ рўйхатдан фойдаланиб майдонларни текшириш орқали бартараф этинг.
Сизнинг кодингиз SQL-инъекциядан химойяланганлигига ишонч ҳосил қилинг.