Rumah > pangkalan data > tutorial mysql > Bolehkah Penyata Disediakan Mengukur Parameter Nama Jadual dengan Selamat?

Bolehkah Penyata Disediakan Mengukur Parameter Nama Jadual dengan Selamat?

DDD
Lepaskan: 2025-01-23 18:16:14
asal
657 orang telah melayarinya

Can Prepared Statements Securely Parameterize Table Names?

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>
Salin selepas log masuk

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>
Salin selepas log masuk

Pendekatan yang betul melibatkan penggunaan interpolasi rentetan:

<code class="language-php">SELECT * FROM {$mytable}</code>
Salin selepas log masuk

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!

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