Penyata Disediakan dan Keselamatan Nama Meja: Peperiksaan Kritikal
Ramai pembangun bergantung pada mysqli_stmt_bind_param
untuk menghalang kelemahan suntikan SQL. Walau bagaimanapun, pendekatan ini memberikan cabaran apabila cuba membuat parameter nama jadual.
Pertimbangkan contoh ini:
<code class="language-php">function insertRow($db, $mysqli, $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol) { $statement = $mysqli->prepare("INSERT INTO " . $new_table . " VALUES (?,?,?,?,?,?,?);"); mysqli_stmt_bind_param($statement, 'sssisss', $Partner, $Merchant, $ips, $score, $category, $overall, $protocol); $statement->execute(); }</code>
Walaupun ini cuba mengurangkan suntikan SQL dengan mengikat pembolehubah, ia meninggalkan nama jadual, $new_table
, terdedah. Bolehkah kita menggunakan pemegang tempat untuk $new_table
dalam pernyataan yang disediakan?
Tidak. Penyata yang disediakan pangkalan data hanya menyokong pengikatan parameter untuk nilai, bukan untuk pengecam jadual atau lajur. Ini kerana nama jadual adalah penting kepada struktur dan kesahihan pernyataan SQL; menukarnya secara dinamik boleh menyebabkan SQL tidak sah.
Walaupun dengan antara muka pangkalan data seperti PDO, yang menawarkan penggunaan pemegang tempat yang lebih fleksibel, cubaan untuk menggantikan nama jadual secara langsung mengakibatkan SQL tidak sah:
<code class="language-sql">SELECT * FROM ?</code>
Pendekatan yang betul melibatkan penggunaan interpolasi rentetan:
<code class="language-php">SELECT * FROM {$mytable}</code>
Walau bagaimanapun, ini memerlukan langkah keselamatan yang penting: penyenaraian putih jadual yang ketat. Sentiasa sahkan $mytable
terhadap senarai pratakrif nama jadual yang dibenarkan untuk menghalang input berniat jahat daripada menjejaskan pangkalan data anda. Jangan sekali-kali bergantung semata-mata pada penyata yang disediakan untuk keselamatan nama jadual.
Atas ialah kandungan terperinci Bolehkah Penyata Disediakan Mengukur Parameter Nama Jadual dengan Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!