Rumah > pembangunan bahagian belakang > tutorial php > Bolehkah Nama Jadual Diparameterkan dalam Pernyataan yang Disediakan untuk Mencegah Suntikan SQL?

Bolehkah Nama Jadual Diparameterkan dalam Pernyataan yang Disediakan untuk Mencegah Suntikan SQL?

DDD
Lepaskan: 2024-12-27 08:35:14
asal
368 orang telah melayarinya

Can Table Names Be Parameterized in Prepared Statements to Prevent SQL Injection?

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();
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan