Rumah > pembangunan bahagian belakang > tutorial php > Petua dan langkah untuk mencegah serangan suntikan SQL dalam PHP dan CGI

Petua dan langkah untuk mencegah serangan suntikan SQL dalam PHP dan CGI

PHPz
Lepaskan: 2023-07-22 22:52:02
asal
1675 orang telah melayarinya

Petua dan langkah untuk mencegah serangan suntikan SQL dengan PHP dan CGI

Dengan perkembangan teknologi rangkaian, aplikasi web memainkan peranan yang semakin penting dalam kehidupan kita. Walau bagaimanapun, isu keselamatan rangkaian yang disertakan telah menjadi semakin menonjol. Antaranya, serangan suntikan SQL adalah kaedah serangan yang paling biasa dan merosakkan. Artikel ini akan membincangkan teknik dan langkah untuk mencegah serangan suntikan SQL dalam PHP dan CGI, serta memberikan contoh kod yang berkaitan.

1. Apakah itu serangan suntikan SQL? Serangan suntikan SQL ialah kaedah mengeksploitasi kelemahan dalam aplikasi web untuk memasukkan kod SQL berniat jahat ke dalam data yang dimasukkan oleh pengguna, dengan itu membolehkan operasi tanpa kebenaran dan akses kepada pangkalan data. Dengan cara ini, penyerang boleh mendapatkan data sensitif, menukar kandungan pangkalan data, atau menggunakannya untuk mengawal keseluruhan sistem.

2. Petua dan langkah untuk mencegah serangan suntikan SQL

    Gunakan penyata yang telah dikompilasi
  1. Penyata yang dikompilasi ialah teknologi yang mengikat data input kepada parameter tertentu sebelum melaksanakan pernyataan SQL. Ini memastikan bahawa data yang dimasukkan hanya akan dianggap sebagai parameter dan tidak dilaksanakan sebagai sebahagian daripada kod SQL. Dalam PHP, anda boleh menggunakan PDO (Objek Data PHP) atau sambungan MySQLi untuk melaksanakan pernyataan yang disediakan.
Contoh 1: Menggunakan PDO untuk pernyataan yang disediakan

// 建立与数据库的连接
$pdo = new PDO("mysql:host=localhost;dbname=database", "user", "password");

// 准备预编译语句
$statement = $pdo->prepare("SELECT * FROM users WHERE username = :username");

// 绑定参数
$statement->bindParam(':username', $username, PDO::PARAM_STR);

// 执行查询
$statement->execute();

// 获取查询结果
$result = $statement->fetchAll(PDO::FETCH_ASSOC);
Salin selepas log masuk

    Menggunakan pertanyaan berparameter
  1. Pertanyaan berparameter ialah kaedah memisahkan pernyataan dan parameter SQL, memastikan data input dianggap sebagai data, bukan bahagian kod. Dalam CGI, anda boleh menggunakan modul DBI Perl untuk melaksanakan pertanyaan berparameter.
Contoh 2: Pertanyaan berparameter menggunakan modul DBI Perl

use DBI;

# 建立与数据库的连接
my $dbh = DBI->connect("DBI:mysql:database=database;host=localhost", "user", "password");

# 准备参数化查询语句
my $sth = $dbh->prepare("SELECT * FROM users WHERE username = ?");

# 绑定参数
$sth->execute($username);

# 获取查询结果
my $result = $sth->fetchrow_hashref();
Salin selepas log masuk

    Menapis dan mengesahkan input pengguna
  1. Input pengguna harus ditapis dan disahkan, membenarkan hanya jenis data tertentu melaluinya dan menolak input yang mengandungi aksara khas. Dalam PHP, anda boleh menggunakan fungsi filter_var() untuk penapisan dan pengesahan.
Contoh 3: Gunakan fungsi filter_var() untuk menapis input pengguna

// 过滤和验证用户输入
$username = $_POST['username'];

if (!filter_var($username, FILTER_VALIDATE_INT)) {
    echo "Invalid username";
}

// 对用户输入进行SQL查询
$query = "SELECT * FROM users WHERE username = " . $username;
$result = mysqli_query($connection, $query);
Salin selepas log masuk

    Menggunakan pengaturcaraan defensif
  1. Pengaturcaraan pertahanan ialah teknik yang meramal dan menghalang kemungkinan serangan semasa proses pengaturcaraan. Semasa menulis kod, pertimbangkan kemungkinan senario serangan dan ambil langkah yang sesuai untuk mencegah serangan ini. Sebagai contoh, hadkan dan sahkan input dengan ketat, menyulitkan dan menyahsulit data sensitif, elakkan daripada memaparkan mesej ralat terperinci pada halaman, dsb.
Contoh 4: Menggunakan pengaturcaraan defensif untuk mengendalikan input pengguna

# 处理用户输入
username = input("Enter your username: ")

# 验证用户输入是否包含特殊字符
if not username.isalnum():
    print("Invalid username")

# 在SQL查询中使用用户输入
query = "SELECT * FROM users WHERE username = %s" % username
result = cursor.execute(query)
Salin selepas log masuk

Ringkasan:

Serangan suntikan SQL ialah salah satu serangan yang paling biasa dan merosakkan dalam aplikasi web. Untuk melindungi aplikasi daripada serangan sedemikian, terdapat beberapa petua dan langkah yang boleh kami ambil. Artikel ini merangkumi penggunaan pernyataan yang disediakan, pertanyaan berparameter, menapis dan mengesahkan input pengguna, dan pengaturcaraan defensif. Semua teknologi ini boleh membantu melindungi keselamatan pangkalan data dan sistem kami. Walau bagaimanapun, dalam aplikasi praktikal, kami juga perlu terus memberi perhatian kepada kelemahan keselamatan dan kaedah serangan baharu, dan sentiasa mengemas kini serta menambah baik langkah pertahanan kami.

Atas ialah kandungan terperinci Petua dan langkah untuk mencegah serangan suntikan SQL dalam PHP dan CGI. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan