Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Strategi keselamatan bentuk PHP: Gunakan pernyataan PDO yang disediakan untuk mengelakkan suntikan SQL

Strategi keselamatan bentuk PHP: Gunakan pernyataan PDO yang disediakan untuk mengelakkan suntikan SQL

WBOY
WBOYasal
2023-06-24 10:21:091393semak imbas

Dengan perkembangan Internet, borang telah menjadi salah satu elemen tapak web yang sangat diperlukan. Walau bagaimanapun, keselamatan bentuk yang tidak sempurna dengan mudah boleh membawa kepada pelbagai kelemahan keselamatan, yang paling biasa ialah suntikan SQL. Walaupun bahasa PHP mudah dan mudah dipelajari, semasa memproses borang, anda mesti memberi perhatian kepada strategi keselamatan tertentu untuk mengelakkan isu keselamatan dengan berkesan seperti suntikan SQL.

SQL injection ialah kaedah serangan yang membolehkan penyerang mengeksploitasi kelemahan aplikasi dan memasukkan kod hasad ke dalam pangkalan data. Penyerang mengubah tingkah laku aplikasi dengan menyerahkan data berniat jahat, dengan itu mengakses dan mengubah suai maklumat dalam pangkalan data. Jika kami tidak mengambil sebarang tindakan balas keselamatan, borang di tapak web kami terdedah kepada serangan suntikan SQL.

Dalam PHP, kami boleh menggunakan beberapa strategi yang berkesan untuk menghalang suntikan SQL. Antaranya, menggunakan kenyataan PDO yang disediakan boleh meningkatkan keselamatan borang dan menghalang serangan suntikan SQL. PDO (Objek Data PHP) ialah lanjutan daripada PHP Ia bukan sahaja menyokong pelbagai jenis pangkalan data, tetapi juga menyediakan fungsi pernyataan yang disediakan yang boleh menghalang suntikan SQL dengan berkesan.

Bagaimana untuk menggunakan pernyataan PDO yang disediakan untuk meningkatkan keselamatan borang? Mari perkenalkan dari aspek berikut:

1 Sambung ke pangkalan data

Untuk menggunakan pernyataan prapemprosesan PDO, anda perlu mewujudkan sambungan dengan pangkalan data. Apabila menyambung ke pangkalan data, kita perlu memberi perhatian kepada isu berikut:

(1) Sebelum mewujudkan sambungan dengan pangkalan data, anda perlu mencipta objek PDO. Apabila mencipta objek PDO, anda perlu memasukkan maklumat sambungan pangkalan data, termasuk jenis pangkalan data, nama hos, nama pengguna, kata laluan, dsb.

Sebagai contoh, jika kita ingin menyambung ke pangkalan data MySQL, kodnya adalah seperti berikut:

$dsn = 'mysql:host=localhost;dbname=testdb';
$username = 'root';
$password = '123456';

try {
    $dbh = new PDO($dsn, $username, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

(2) Apabila membuat sambungan dengan pangkalan data, mod pengendalian ralat perlu ditetapkan. PDO menyediakan tiga mod pengendalian ralat: mod senyap, mod amaran dan mod pengecualian. Apabila menggunakan pernyataan yang disediakan PDO, kami biasanya menggunakan mod pengecualian, yang boleh mengendalikan ralat dengan lebih mudah.

Sebagai contoh, kami boleh menetapkan mod pengendalian ralat PDO kepada mod pengecualian melalui kod berikut:

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

2 Tulis pernyataan yang disediakan

Melalui pernyataan yang disediakan PDO, kami boleh Pernyataan dan parameter SQL yang akan dilaksanakan diproses secara berasingan untuk mengelakkan suntikan SQL. Untuk menulis pernyataan yang disediakan, kita boleh mengikuti langkah berikut:

(1) Gantikan pembolehubah dalam pernyataan SQL dengan "?"" (2) Susun menggunakan kaedah sediakan Pernyataan SQL, jana objek pernyataan yang disediakan;

(3) Ikat parameter dan ruang letak yang perlu diikat pada objek pernyataan yang disediakan dalam surat-menyurat satu dengan satu.

Sebagai contoh, kami ingin memasukkan sekeping data ke dalam pangkalan data, kodnya adalah seperti berikut:

$name = $_POST['name'];
$age = $_POST['age'];

$sql = "INSERT INTO student (name, age) VALUES (?, ?)";
$stmt = $dbh->prepare($sql);
$stmt->bindParam(1, $name);
$stmt->bindParam(2, $age);
$stmt->execute();

3 Ikat parameter

Apabila menggunakan pernyataan prapemprosesan PDO, anda perlu mengikat parameter tertentu dan ruang letak yang diperlukan terikat pada objek pernyataan yang disediakan dalam surat-menyurat satu dengan satu. PDO menyediakan dua kaedah mengikat parameter: bindParam dan bindValue.

Kaedah bindParam menerima tiga parameter: kedudukan pemegang tempat, pembolehubah terikat dan jenis data pembolehubah.

Sebagai contoh, kita ingin mengikat pembolehubah rentetan, kodnya adalah seperti berikut:

$stmt->bindParam(1, $name, PDO::PARAM_STR);

Kaedah bindValue menerima dua parameter: kedudukan pemegang tempat dan nilai terikat.

Sebagai contoh, kami ingin mengikat pembolehubah integer, kodnya adalah seperti berikut:

$stmt->bindValue(2, $age, PDO::PARAM_INT);

Dengan mengikat parameter, kami boleh memastikan bahawa data input tidak akan dihuraikan sebagai sebahagian daripada SQL kenyataan, dengan itu Berkesan menghalang suntikan SQL.

4. Memproses hasil pertanyaan

Apabila kami melakukan operasi pertanyaan, kami perlu memproses hasil pertanyaan. Apabila menggunakan pernyataan prapemprosesan PDO, kami boleh memproses hasil pertanyaan dalam dua kaedah berikut:

(1) Gunakan kaedah fetchAll untuk mendapatkan tatasusunan semua hasil pertanyaan

Sebagai contoh, kami mahu untuk mendapatkan semua Untuk maklumat pelajar, kodnya adalah seperti berikut:

$stmt = $dbh->query('SELECT * FROM student');
$result = $stmt->fetchAll();

(2) Gunakan kaedah ambil untuk mendapatkan baris data daripada hasil pertanyaan.

Sebagai contoh, kami ingin mendapatkan maklumat pelajar baris demi baris, kodnya adalah seperti berikut:

$stmt = $dbh->query('SELECT * FROM student');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo $row['name'] . ' - ' . $row['age'] . '<br>';
}

Ringkasan

Ringkasnya, keselamatan borang PHP tidak boleh diabaikan apabila kami membangunkan soalan laman web. Dengan menggunakan pernyataan yang disediakan oleh PDO, kami boleh mengelakkan isu keselamatan seperti suntikan SQL dan meningkatkan keselamatan borang dengan berkesan. Pada masa yang sama, semasa menulis borang PHP, kita juga harus memberi perhatian kepada aspek lain dalam strategi keselamatan, seperti pengesahan data, menapis aksara haram, dsb., untuk melindungi tapak web kami daripada serangan berniat jahat.

Atas ialah kandungan terperinci Strategi keselamatan bentuk PHP: Gunakan pernyataan PDO yang disediakan untuk mengelakkan suntikan SQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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