Penyata Disediakan dan Nama Jadual Dinamik: Pertimbangan Keselamatan
Pernyataan yang disediakan adalah asas pencegahan suntikan SQL. Walau bagaimanapun, keberkesanannya dicabar apabila berurusan dengan nama jadual yang dijana secara dinamik. Walaupun penyataan yang disediakan cemerlang dalam parameter parameter dalam pertanyaan, mereka secara amnya tidak boleh meparameterkan nama jadual itu sendiri.
Amalan biasa mengikat parameter untuk menghalang suntikan SQL berfungsi dengan baik untuk nilai lajur. Tetapi cubaan untuk menggantikan nama jadual menggunakan pemegang tempat (cth., SELECT * FROM ?
) dalam pernyataan yang disediakan biasanya tidak berjaya. Sistem pangkalan data mentafsirkan ini sebagai SQL tidak sah. Malah sistem yang meniru gelagat pernyataan yang disediakan, seperti PDO, akan gagal dalam senario ini. Contohnya, SELECT * FROM ?
dengan parameter "mytable" berkemungkinan akan menyebabkan pertanyaan tidak sah SELECT * FROM 'mytable'
.
Oleh itu, parameter nama jadual secara langsung dalam pernyataan yang disediakan bukanlah penyelesaian keselamatan yang berdaya maju. Sebaliknya, pendekatan senarai putih disyorkan. Ini melibatkan pra-takrif senarai nama jadual yang dibenarkan. Sebelum melaksanakan sebarang pertanyaan SQL, sahkan bahawa nama jadual yang dibekalkan pengguna wujud dalam senarai putih ini. Kaedah ini, walaupun kurang elegan daripada parameterisasi, menjamin integriti pangkalan data dan menghalang akses tanpa kebenaran.
Atas ialah kandungan terperinci Bolehkah Penyata Disediakan Mengendalikan Nama Jadual Dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!