Rumah >pembangunan bahagian belakang >tutorial php >Bolehkah Nama Jadual Diparameterkan dalam Pernyataan yang Disediakan untuk Mencegah Suntikan SQL?
Memparameterkan Nama Jadual dalam Pernyataan yang Disediakan: Adakah Mungkin?
Percubaan untuk membuat parameter nama jadual dalam pernyataan yang disediakan biasanya membawa kepada kelemahan suntikan SQL. Walaupun fungsi mysqli_stmt_bind_param membenarkan parameter mengikat kepada nilai, ia tidak menyokong nama jadual berparameter.
Sebagai contoh, coretan kod berikut menunjukkan percubaan untuk meparameterkan nama jadual:
function insertRow($db, $mysqli, $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol) { $statement = $mysqli->prepare("INSERT INTO ? VALUES (?,?,?,?,?,?,?);"); mysqli_stmt_bind_param($statement, 'ssssisss', $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol)); $statement->execute(); }
Walau bagaimanapun , pendekatan ini tidak betul dan akan mengakibatkan pertanyaan tidak sah apabila dilaksanakan. Penyata yang disediakan direka bentuk untuk mengikat parameter kepada nilai tertentu dan nama jadual tidak dianggap sebagai nilai yang boleh diparameterkan.
Sebaliknya, adalah disyorkan untuk menggunakan nama jadual statik bersama-sama dengan senarai putih nilai yang dibenarkan untuk melindungi daripada Suntikan SQL. Contohnya:
function insertRow($db, $mysqli, $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol) { if (!in_array($new_table, $allowed_tables)) { throw new Exception("Invalid table name"); } $statement = $mysqli->prepare("INSERT INTO $new_table VALUES (?,?,?,?,?,?,?);"); mysqli_stmt_bind_param($statement, 'sssisss', $Partner, $Merchant, $ips, $score, $category, $overall, $protocol); $statement->execute(); }
Pendekatan ini memastikan bahawa hanya nama jadual yang sah digunakan, mengurangkan risiko suntikan SQL yang dikaitkan dengan perubahan nama jadual dinamik.
Atas ialah kandungan terperinci Bolehkah Nama Jadual Diparameterkan dalam Pernyataan yang Disediakan untuk Mencegah Suntikan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!