Daftar Field dalam SQL di PHP
Kadang-kadang ada situasi di mana kita menerima nama field dari pengguna. Dalam kasus ini, mereka juga tidak bisa langsung disisipkan ke dalam kueri. Hanya setelah pemeriksaan melalui whitelist.
Mari kita lihat contoh kerentanannya. Misalkan kita memiliki kueri berikut:
<?php
$query = "SELECT id,login FROM users";
$res = mysqli_query($link, $query);
?>
Misalkan hasil kueri kita tampilkan dengan cara berikut:
<?php
for ($data = []; $row = mysqli_fetch_assoc($res); $data[] = $row);
var_dump($data);
?>
Misalkan nama field datang melalui parameter GET:
<?php
$fields = $_GET['fields'];
$query = "SELECT $fields FROM users";
$res = mysqli_query($link, $query);
?>
Kami berharap pengguna akan mengirimkan sesuatu seperti ini:
?fields=id,login
Tetapi penyerang dapat menambahkan sesuatu yang tidak ingin kami tampilkan:
?fields=id,login,password
Reproduksi contoh yang diberikan dalam pelajaran. Periksa adanya kerentanan. Perbaiki dengan menggunakan whitelist field.
Pastikan kode Anda terlindungi dari SQL injection.