


Menyekat serangan suntikan SQL adalah penting untuk mengekalkan keselamatan aplikasi PHP anda. Suntikan SQL ialah kelemahan yang membolehkan penyerang melaksanakan kod SQL sewenang-wenangnya pada pangkalan data anda, yang berpotensi membawa kepada pelanggaran atau kehilangan data. Berikut ialah panduan langkah demi langkah untuk mencegah serangan suntikan SQL dalam PHP, lengkap dengan contoh dan penerangan secara langsung.
1. Memahami SQL Injection
Suntikan SQL berlaku apabila input pengguna disanitasi dengan tidak betul dan dimasukkan ke dalam pertanyaan SQL. Contohnya, jika pengguna memasukkan kod SQL berniat jahat, ia boleh memanipulasi pertanyaan anda untuk melakukan tindakan yang tidak diingini.
Contoh SQL Injection:
// Vulnerable Code $user_id = $_GET['user_id']; $query = "SELECT * FROM users WHERE id = $user_id"; $result = mysqli_query($conn, $query);
Jika user_id ditetapkan kepada 1 ATAU 1=1, pertanyaan menjadi:
SELECT * FROM users WHERE id = 1 OR 1=1
Pertanyaan ini akan mengembalikan semua baris daripada jadual pengguna kerana 1=1 sentiasa benar.
2. Gunakan Penyata Disediakan
Pernyataan yang disediakan adalah pertahanan utama terhadap suntikan SQL. Mereka memisahkan logik SQL daripada data dan memastikan input pengguna dianggap sebagai data dan bukannya kod boleh laku.
Menggunakan MySQLi dengan Penyata Disediakan:
- Sambung ke Pangkalan Data:
$conn = new mysqli("localhost", "username", "password", "database"); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }
- Sediakan Penyata SQL:
$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
- Parameter Ikatan:
$stmt->bind_param("i", $user_id); // "i" indicates the type is integer
- Laksanakan Kenyataan:
$user_id = $_GET['user_id']; $stmt->execute();
- Ambil Hasil:
$result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { // Process results }
- Tutup Penyata dan Sambungan:
$stmt->close(); $conn->close();
Contoh Lengkap:
<?php // Database connection $conn = new mysqli("localhost", "username", "password", "database"); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } // Prepare statement $stmt = $conn->prepare("SELECT * FROM users WHERE id = ?"); if ($stmt === false) { die("Prepare failed: " . $conn->error); } // Bind parameters $user_id = $_GET['user_id']; $stmt->bind_param("i", $user_id); // Execute statement $stmt->execute(); // Get results $result = $stmt->get_result(); while ($row = $result->fetch_assoc()) { echo "User ID: " . $row['id'] . "<br>"; echo "User Name: " . $row['name'] . "<br>"; } // Close statement and connection $stmt->close(); $conn->close(); ?>
3. Gunakan PDO dengan Penyata Disediakan
Objek Data PHP (PDO) menawarkan perlindungan yang serupa terhadap suntikan SQL dan menyokong berbilang sistem pangkalan data.
Menggunakan PDO dengan Penyata Disediakan:
- Sambung ke Pangkalan Data:
try { $pdo = new PDO("mysql:host=localhost;dbname=database", "username", "password"); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $e) { die("Connection failed: " . $e->getMessage()); }
- Sediakan Penyata SQL:
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");
- Ikat Parameter dan Laksanakan:
$stmt->bindParam(':id', $user_id, PDO::PARAM_INT); $user_id = $_GET['user_id']; $stmt->execute();
- Ambil Hasil:
$results = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($results as $row) { echo "User ID: " . $row['id'] . "<br>"; echo "User Name: " . $row['name'] . "<br>"; }
Contoh Lengkap:
setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // Prepare statement $stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id"); // Bind parameters $user_id = $_GET['user_id']; $stmt->bindParam(':id', $user_id, PDO::PARAM_INT); // Execute statement $stmt->execute(); // Fetch results $results = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($results as $row) { echo "User ID: " . $row['id'] . "
"; echo "User Name: " . $row['name'] . "
"; } } catch (PDOException $e) { die("Error: " . $e->getMessage()); } ?>
4. Amalan Keselamatan Tambahan
- Sanitize Input: Sentiasa bersihkan dan sahkan input pengguna untuk memastikan ia berada dalam format yang diharapkan.
- Gunakan ORM: Pemeta Perkaitan Objek seperti Eloquent (Laravel) mengendalikan perlindungan suntikan SQL secara dalaman.
- Hadkan Kebenaran Pangkalan Data: Gunakan prinsip keistimewaan paling sedikit untuk akaun pengguna pangkalan data.
5. Kesimpulan
Menyekat serangan suntikan SQL adalah penting untuk melindungi aplikasi PHP anda. Dengan menggunakan pernyataan yang disediakan dengan MySQLi atau PDO, anda memastikan bahawa input pengguna dikendalikan dengan selamat dan tidak dilaksanakan sebagai sebahagian daripada pertanyaan SQL anda. Mengikuti amalan terbaik ini akan membantu melindungi aplikasi anda daripada salah satu kelemahan web yang paling biasa.
Atas ialah kandungan terperinci Melindungi Aplikasi PHP Terhadap Serangan Suntikan SQL. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

PHP kekal sebagai alat yang kuat dan digunakan secara meluas dalam pengaturcaraan moden, terutamanya dalam bidang pembangunan web. 1) PHP mudah digunakan dan diintegrasikan dengan lancar dengan pangkalan data, dan merupakan pilihan pertama bagi banyak pemaju. 2) Ia menyokong penjanaan kandungan dinamik dan pengaturcaraan berorientasikan objek, sesuai untuk membuat dan mengekalkan laman web dengan cepat. 3) Prestasi PHP dapat ditingkatkan dengan caching dan mengoptimumkan pertanyaan pangkalan data, dan komuniti yang luas dan ekosistem yang kaya menjadikannya masih penting dalam timbunan teknologi hari ini.

Dalam PHP, rujukan lemah dilaksanakan melalui kelas lemah dan tidak akan menghalang pemungut sampah daripada menebus objek. Rujukan lemah sesuai untuk senario seperti sistem caching dan pendengar acara. Harus diingat bahawa ia tidak dapat menjamin kelangsungan hidup objek dan pengumpulan sampah mungkin ditangguhkan.

Kaedah \ _ \ _ membolehkan objek dipanggil seperti fungsi. 1. Tentukan kaedah \ _ \ _ supaya objek boleh dipanggil. 2. Apabila menggunakan sintaks $ OBJ (...), PHP akan melaksanakan kaedah \ _ \ _ invoke. 3. Sesuai untuk senario seperti pembalakan dan kalkulator, meningkatkan fleksibiliti kod dan kebolehbacaan.

Serat diperkenalkan dalam Php8.1, meningkatkan keupayaan pemprosesan serentak. 1) Serat adalah model konkurensi ringan yang serupa dengan coroutine. 2) Mereka membenarkan pemaju mengawal aliran pelaksanaan tugas secara manual dan sesuai untuk mengendalikan tugas I/O-intensif. 3) Menggunakan serat boleh menulis kod yang lebih cekap dan responsif.

Komuniti PHP menyediakan sumber dan sokongan yang kaya untuk membantu pemaju berkembang. 1) Sumber termasuk dokumentasi rasmi, tutorial, blog dan projek sumber terbuka seperti Laravel dan Symfony. 2) Sokongan boleh didapati melalui saluran StackOverflow, Reddit dan Slack. 3) Trend pembangunan boleh dipelajari dengan mengikuti RFC. 4) Integrasi ke dalam masyarakat dapat dicapai melalui penyertaan aktif, sumbangan kepada kod dan perkongsian pembelajaran.

PHP dan Python masing -masing mempunyai kelebihan sendiri, dan pilihannya harus berdasarkan keperluan projek. 1.Php sesuai untuk pembangunan web, dengan sintaks mudah dan kecekapan pelaksanaan yang tinggi. 2. Python sesuai untuk sains data dan pembelajaran mesin, dengan sintaks ringkas dan perpustakaan yang kaya.

PHP tidak mati, tetapi sentiasa menyesuaikan diri dan berkembang. 1) PHP telah menjalani beberapa lelaran versi sejak tahun 1994 untuk menyesuaikan diri dengan trend teknologi baru. 2) Ia kini digunakan secara meluas dalam e-dagang, sistem pengurusan kandungan dan bidang lain. 3) Php8 memperkenalkan pengkompil JIT dan fungsi lain untuk meningkatkan prestasi dan pemodenan. 4) Gunakan OPCACHE dan ikut piawaian PSR-12 untuk mengoptimumkan prestasi dan kualiti kod.

Masa depan PHP akan dicapai dengan menyesuaikan diri dengan trend teknologi baru dan memperkenalkan ciri -ciri inovatif: 1) menyesuaikan diri dengan pengkomputeran awan, kontena dan seni bina microservice, menyokong Docker dan Kubernetes; 2) memperkenalkan pengkompil JIT dan jenis penghitungan untuk meningkatkan prestasi dan kecekapan pemprosesan data; 3) Berterusan mengoptimumkan prestasi dan mempromosikan amalan terbaik.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

DVWA
Damn Vulnerable Web App (DVWA) ialah aplikasi web PHP/MySQL yang sangat terdedah. Matlamat utamanya adalah untuk menjadi bantuan bagi profesional keselamatan untuk menguji kemahiran dan alatan mereka dalam persekitaran undang-undang, untuk membantu pembangun web lebih memahami proses mengamankan aplikasi web, dan untuk membantu guru/pelajar mengajar/belajar dalam persekitaran bilik darjah Aplikasi web keselamatan. Matlamat DVWA adalah untuk mempraktikkan beberapa kelemahan web yang paling biasa melalui antara muka yang mudah dan mudah, dengan pelbagai tahap kesukaran. Sila ambil perhatian bahawa perisian ini

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Pelayar Peperiksaan Selamat
Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.