Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengelakkan lubang keselamatan dalam PHP?

Bagaimana untuk mengelakkan lubang keselamatan dalam PHP?

PHPz
PHPzasal
2023-05-12 08:12:051415semak imbas

PHP ialah bahasa skrip bahagian pelayan yang berkuasa dengan pelbagai aplikasi. Walau bagaimanapun, ia juga telah dipecahkan kerana kelemahan kod, yang memerlukan pembangun PHP untuk mempunyai pemahaman yang lebih mendalam tentang isu keselamatan. Artikel ini akan memperkenalkan cara untuk mengelakkan kelemahan keselamatan biasa semasa pembangunan dan meningkatkan keselamatan aplikasi.

1. Cegah serangan suntikan SQL

Serangan suntikan SQL ialah kelemahan keselamatan biasa Ia menggunakan data yang dimasukkan pengguna untuk mengubah suai pernyataan pertanyaan SQL untuk mencapai tujuan penyerang. Untuk mengelakkan serangan ini, anda perlu melakukan perkara berikut:

  1. Cuba gunakan pernyataan yang disediakan untuk melaksanakan operasi pangkalan data, dan memproses data yang dimasukkan pengguna secara berasingan daripada pernyataan pertanyaan Sintaks pernyataan praproses adalah seperti berikut :
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
  1. Menapis dan melarikan data yang dimasukkan oleh pengguna Fungsi mysql_real_escape_string() boleh digunakan untuk melarikan data.
$username = mysql_real_escape_string($_POST['username']);
$password = mysql_real_escape_string($_POST['password']);
  1. Watak yang boleh membawa kepada serangan suntikan adalah dilarang. Ini termasuk simbol seperti petikan tunggal, petikan berganda, garis miring ke belakang, dsb.
$data = str_replace(array("'", """, "\"), "", $data);
  1. Cegah serangan XSS

Serangan kod hasad. Untuk mengelakkan serangan ini, anda perlu melakukan perkara berikut:

  1. Tapis input pengguna untuk mengelak daripada memasukkan kod HTML atau Javascript yang berniat jahat. Melarikan diri HTML boleh dilakukan menggunakan fungsi htmlspecialchars().
$name = htmlspecialchars($_POST['name'], ENT_QUOTES, 'UTF-8');
  1. Elakkan menggunakan kaedah output yang tidak selamat pada halaman, seperti terus menggunakan gema atau mencetak untuk mengeluarkan data yang dimasukkan pengguna.
<input type="text" name="name" value="<?php echo $_POST['name']; ?>">
  1. Gunakan perpustakaan pihak ketiga yang selamat untuk menapis dan mengesahkan input pengguna, seperti HTML Purifier, AntiXSS, dsb.
  2. Cegah kerentanan kemasukan fail

Kerentanan kemasukan fail bermakna penyerang menyuntik kod hasad ke dalam aplikasi untuk mengawal fungsi pemasukan fail pelayan untuk melaksanakan kod hasad. Untuk mengelakkan serangan ini, anda perlu melakukan perkara berikut:

  1. Melarang kemasukan fail yang boleh dikawal pengguna. Elakkan menggunakan nama fail yang boleh dikawal pengguna sebagai argumen untuk memasukkan() atau memerlukan() fungsi.
if (!in_array($_GET['file'], array('file1.php', 'file2.php', ...))) {
    die('Invalid file name');
}

include($_GET['file']);
  1. Gunakan laluan mutlak dan bukannya laluan relatif untuk kemasukan fail. Ini menghalang penyerang daripada membina laluan relatif tertentu untuk melakukan serangan.
include("/var/www/html/includes/news.php");
  1. Kawalan kebenaran untuk fail yang disertakan. Letakkan fail yang disertakan dalam direktori bebas dan tetapkan kebenaran akses direktori kepada baca sahaja untuk mengelakkan fail berniat jahat daripada diubah suai atau diusik.
  2. Halang rampasan sesi dan serangan penetapan sesi

Rampasan sesi bermakna penyerang memperoleh maklumat sesi pengguna dengan mencuri ID sesi pengguna, dengan itu mendapatkan kebenaran dan maklumat sensitif pengguna. Serangan penetapan sesi ialah apabila penyerang mendapatkan kebenaran pengguna dan maklumat sensitif dengan membetulkan ID sesi berniat jahat pada penyemak imbas pengguna. Untuk mengelakkan serangan ini, anda perlu melakukan perkara berikut:

  1. Gunakan fungsi session_regenerate_id() untuk menjana semula ID sesi dan mengemas kini ID sesi selepas pengguna log masuk atau menukar identitinya.
session_start();
if ($_SESSION['authenticated'] == true) {
    session_regenerate_id();
}
  1. Sulitkan ID sesi, gunakan algoritma penyulitan untuk menyulitkan ID sesi dan simpan nilai yang disulitkan dalam kuki, supaya walaupun penyerang memperoleh ID sesi, dia tidak boleh langsung guna.
session_start();
$encrypted_session_id = md5($_SESSION['session_id'] . 'secret_key');
$_COOKIE['session_id'] = $encrypted_session_id;
  1. Padamkan rekod sesi tamat tempoh secara kerap untuk mengelakkan sesi daripada digunakan secara berniat jahat.
session_start();
if (isset($_SESSION['last_access'])) {
    if (time() - $_SESSION['last_access'] > 1800) {
        session_unset();
        session_destroy();
    }
}
$_SESSION['last_access'] = time();

Artikel ini memperkenalkan cara untuk mengelakkan kelemahan keselamatan biasa dalam pembangunan PHP, dengan menapis data yang dimasukkan pengguna, menggunakan kaedah kemasukan fail selamat, mencegah rampasan sesi dan serangan penetapan sesi, dsb., untuk menambah baik Aplikasi keselamatan. Aplikasi yang lebih selamat bukan sahaja boleh meningkatkan pengalaman pengguna, tetapi juga melindungi privasi pengguna dan keselamatan data.

Atas ialah kandungan terperinci Bagaimana untuk mengelakkan lubang keselamatan dalam PHP?. 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