Apabila menggunakan pernyataan yang disediakan PDO, adalah penting untuk ambil perhatian bahawa pemegang tempat hanya boleh mewakili literal data. Ini bermakna percubaan untuk mengikat pengecam (nama jadual atau medan) atau kata kunci sintaks menggunakan bindParam() atau bindValue() akan mengakibatkan tingkah laku yang tidak dijangka.
Apabila bekerja dengan dinamik pertanyaan yang melibatkan penetapan nama jadual atau medan secara dinamik, adalah penting untuk mengendalikan pengikatan pengecam dengan berhati-hati. PDO tidak memberikan sokongan langsung untuk pengecam yang mengikat. Oleh itu, pembangun mesti memformat dan mengesahkan pengecam secara manual untuk memastikan keselamatan dan mencegah serangan suntikan.
Untuk memformat pengecam dengan selamat, ikut peraturan ini:
Setelah diformat, semak pengecam terhadap senarai putih berkod keras bagi nilai yang dibenarkan untuk mengelakkan penyalahgunaan.
Begitu juga, mengikat kata kunci sintaks, seperti sebagai 'ORDER BY' atau 'DESC', tidak disokong oleh PDO. Pembangun mesti mengesahkan dan menyenarai putih kata kunci secara manual untuk menghalang input berniat jahat daripada mengubah tingkah laku pertanyaan.
Kod berikut menggambarkan cara mengendalikan pengecam dan kata kunci dinamik menggunakan pemformatan rentetan dan senarai putih:
$field = "`" . str_replace("`", "``", $_GET['field']) . "`"; $dir = $_GET['dir'] == 'DESC' ? 'DESC' : 'ASC'; $sql = "SELECT $field FROM t ORDER BY field $dir";
Dalam contoh ini, nama medan dinamik disertakan dalam tanda belakang dan melarikan diri mengikut keperluan. Arah isihan disahkan terhadap senarai putih untuk menghalang input berniat jahat daripada mengubah pertanyaan.
Dengan mematuhi garis panduan ini dengan teliti, pembangun boleh menggunakan pernyataan yang disediakan PDO dengan pengecam dan kata kunci dinamik sambil mengekalkan keselamatan dan mencegah serangan suntikan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Penyata Disediakan PDO dengan Pengecam Dinamik dan Kata Kunci dengan Selamat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!