Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penapisan data PHP: Bagaimana untuk mencegah serangan skrip merentas tapak

Penapisan data PHP: Bagaimana untuk mencegah serangan skrip merentas tapak

王林
王林asal
2023-07-30 18:09:141669semak imbas

Penapisan Data PHP: Cara Mencegah Serangan Skrip Merentas Tapak

Pengenalan:
Dalam persekitaran rangkaian moden, Skrip Merentas Tapak (XSS) telah menjadi salah satu kelemahan keselamatan rangkaian yang paling biasa dan berbahaya. Serangan XSS mengambil kesempatan daripada pengendalian data input pengguna yang tidak betul di tapak web, membolehkan penyerang menyuntik kod skrip berniat jahat dan mendapatkan maklumat sensitif pengguna. Artikel ini akan menerangkan cara untuk menghalang serangan skrip merentas tapak melalui penapisan data PHP dan menyediakan beberapa kod sampel.

  1. Fahami prinsip serangan XSS
    Sebelum menghalang serangan XSS, kita perlu terlebih dahulu memahami cara penyerang mengeksploitasi kelemahan ini untuk menyerang. Serangan XSS terbahagi terutamanya kepada tiga jenis: XSS Reflected, XSS Tersimpan dan XSS berasaskan DOM. Serangan XSS yang dicerminkan dan disimpan adalah yang paling biasa. Penyerang memasukkan kod skrip berniat jahat ke dalam data yang dimasukkan oleh pengguna Apabila pengguna melayari halaman web, kod berniat jahat akan dilaksanakan untuk mencapai tujuan serangan.
  2. Gunakan fungsi htmlspecialchars untuk menapis output
    Dalam PHP, anda boleh menggunakan fungsi htmlspecialchars untuk menapis output dan melarikan aksara khas ke dalam entiti HTML untuk mengelakkan kod skrip berniat jahat daripada dilaksanakan. Berikut ialah contoh kod:
$userInput = $_GET['input'];
$filteredOutput = htmlspecialchars($userInput);
echo $filteredOutput;

Dalam contoh di atas, $_GET['input'] bermaksud untuk mendapatkan data yang dimasukkan pengguna daripada parameter URL. Fungsi htmlspecialchars melepaskan data yang dimasukkan oleh pengguna dan kemudian mengeluarkannya ke halaman. Ini menghalang penyerang daripada menyuntik kod skrip berniat jahat.

  1. Gunakan pernyataan yang disediakan mysqli atau PDO untuk menapis pertanyaan pangkalan data
    Untuk serangan XSS yang disimpan, penyerang akan menyimpan kod hasad ke dalam pangkalan data Apabila program latar belakang membaca data daripada pangkalan data dan mengeluarkannya ke halaman, kod hasad akan dilaksanakan. Untuk mengelakkan serangan ini, pernyataan yang disediakan mysqli atau PDO boleh digunakan untuk menapis input.

Berikut ialah contoh kod menggunakan pernyataan mysqli precompiled:

$conn = new mysqli($servername, $username, $password, $dbname);
$stmt = $conn->prepare("SELECT username FROM users WHERE id = ?");
$stmt->bind_param("i", $userId);
$stmt->execute();
$stmt->bind_result($username);

while ($stmt->fetch()) {
  echo htmlspecialchars($username);
}

$stmt->close();
$conn->close();

Dalam contoh di atas, pernyataan precompiled mysqli digunakan untuk mengikat $id yang dimasukkan oleh pengguna kepada pernyataan pertanyaan, dan pengikatan ditentukan melalui bind_param fungsi Jenis parameter. Kemudian laksanakan pertanyaan dan gunakan fungsi bind_result untuk mengikat keputusan pertanyaan kepada pembolehubah $nama pengguna. Akhir sekali, gunakan fungsi htmlspecialchars untuk menapis output untuk mengelakkan kod berniat jahat daripada dilaksanakan.

  1. Gunakan fungsi filter_var untuk menapis input pengguna
    PHP menyediakan fungsi filter_var untuk menapis data input pengguna. Pelbagai jenis input pengguna boleh ditapis menggunakan fungsi filter_var dalam kombinasi dengan penapis yang dipratentukan seperti FILTER_SANITIZE_STRING.

Berikut ialah kod sampel yang menggunakan fungsi filter_var untuk menapis input pengguna:

$userInput = $_POST['input'];
$filteredInput = filter_var($userInput, FILTER_SANITIZE_STRING);
echo $filteredInput;

Dalam contoh di atas, fungsi filter_var digunakan untuk menapis data yang dimasukkan pengguna, dan penapis ditentukan sebagai FILTER_SANITIZE_STRING, yang bermaksud bahawa hanya aksara rentetan asas dibenarkan. Ini akan menapis beberapa aksara khas dan teg HTML untuk mengelakkan serangan XSS.

Kesimpulan:
Untuk meningkatkan keselamatan laman web dan mencegah serangan skrip merentas tapak, kami perlu menapis dan memproses data yang dimasukkan oleh pengguna dengan betul. Artikel ini menerangkan cara menggunakan fungsi htmlspecialchars untuk menapis output, menggunakan penyata mysqli atau PDO yang dikompilasi untuk menapis pertanyaan pangkalan data dan menggunakan fungsi filter_var untuk menapis input pengguna. Dengan penapisan dan pemprosesan data yang betul, kami boleh melindungi tapak web dengan berkesan daripada ancaman serangan XSS.

Bahan rujukan:

  • [dokumentasi rasmi PHP - htmlspecialchars](https://www.php.net/manual/en/function.htmlspecialchars.php)
  • [dokumentasi rasmi PHP - mysqli](https:// www.php.net/manual/en/book.mysqli.php)
  • [Dokumentasi Rasmi PHP - PDO](https://www.php.net/manual/en/book.pdo.php)
  • [PHP Dokumentasi rasmi - filter_var](https://www.php.net/manual/en/function.filter-var.php)
  • [OWASP - XSS](https://owasp.org/www-community/attacks/ xss/)

Atas ialah kandungan terperinci Penapisan data PHP: Bagaimana untuk mencegah serangan skrip merentas tapak. 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