Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk mengelakkan serangan suntikan SQL dalam bentuk PHP?

Bagaimana untuk mengelakkan serangan suntikan SQL dalam bentuk PHP?

WBOY
WBOYasal
2023-08-25 19:45:381102semak imbas

Bagaimana untuk mengelakkan serangan suntikan SQL dalam bentuk PHP?

Bagaimana untuk menghalang serangan suntikan SQL dalam bentuk PHP?

Serangan suntikan SQL ialah kelemahan keselamatan yang sangat biasa dan berbahaya dalam pembangunan web. Penyerang menggunakan kelemahan ini untuk menyuntik kod berniat jahat ke dalam pangkalan data, dengan itu memusnahkan integriti pangkalan data dan juga mendapatkan maklumat sensitif. Dalam bentuk PHP, kaedah utama untuk mencegah serangan suntikan SQL adalah dengan ketat menapis dan mengekod data yang dimasukkan oleh pengguna. Artikel ini memperincikan cara mencegah serangan suntikan SQL, dengan contoh kod.

1. Gunakan penyata yang disediakan

Penyata yang disediakan ialah teknologi yang menghantar penyata SQL kepada penghurai pangkalan data untuk disusun dan dihuraikan sebelum melaksanakannya. Ia boleh menghalang serangan suntikan SQL dengan berkesan kerana ia menggunakan pertanyaan berparameter untuk memisahkan data yang dimasukkan pengguna daripada pernyataan SQL. PDO PHP menyediakan kaedah untuk menggunakan pernyataan yang disediakan Contohnya adalah seperti berikut:

// 连接数据库
$dsn = 'mysql:host=localhost;dbname=test';
$username = 'root';
$password = 'password';

try {
    $pdo = new PDO($dsn, $username, $password);
    // 设置错误模式为异常
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    echo '数据库连接失败:' . $e->getMessage();
}

// 准备SQL语句
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');

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

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

// 获取结果
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

// 输出结果
foreach($result as $row) {
    echo $row['username'];
}

Dalam kod di atas, kami menyediakan pernyataan SQL melalui kaedah prepare(), yang menggunakan parameter :nama pengguna untuk menggantikan nama pengguna yang dimasukkan oleh pengguna. Kemudian, nama pengguna sebenar terikat pada parameter melalui kaedah bindParam(), dan akhirnya pertanyaan dilaksanakan dan keputusan diperoleh. Dengan cara ini, tidak kira apa input pengguna, ia tidak akan menjejaskan pernyataan SQL. prepare()方法准备了一个SQL语句,其中使用了一个参数:username来代替用户输入的用户名。然后,通过bindParam()方法将实际的用户名绑定到参数上,最后执行查询并获取结果。这样,无论用户输入如何,都不会对SQL语句造成影响。

二、使用过滤函数

PHP提供了一些过滤函数,用于过滤和清理用户输入的数据。这些函数可以帮助我们去除输入字符串中的特殊字符和SQL关键字,从而防止SQL注入攻击。其中,mysqli_real_escape_string()是一种常用的过滤函数,示例如下:

// 连接数据库
$servername = "localhost";
$username = "root";
$password = "password";
$dbname = "test";

$conn = mysqli_connect($servername, $username, $password, $dbname);
// 检查连接是否成功
if (!$conn) {
    die("数据库连接失败: " . mysqli_connect_error());
}

// 过滤用户输入数据
$username = mysqli_real_escape_string($conn, $_POST['username']);
$password = mysqli_real_escape_string($conn, $_POST['password']);

// 执行查询
$sql = "SELECT * FROM users WHERE username = '{$username}' AND password = '{$password}'";
$result = mysqli_query($conn, $sql);

// 处理结果
if (mysqli_num_rows($result) > 0) {
    while($row = mysqli_fetch_assoc($result)) {
        echo "用户名为: " . $row["username"];
    }
} else {
    echo "用户名或密码错误";
}

// 关闭连接
mysqli_close($conn);

在上面的代码中,我们使用mysqli_real_escape_string()

2. Gunakan fungsi penapis

PHP menyediakan beberapa fungsi penapis untuk menapis dan membersihkan data yang dimasukkan pengguna. Fungsi ini boleh membantu kami mengalih keluar aksara khas dan kata kunci SQL daripada rentetan input untuk mengelakkan serangan suntikan SQL. Antaranya, mysqli_real_escape_string() ialah fungsi penapisan yang biasa digunakan Contohnya seperti berikut: 🎜rrreee🎜Dalam kod di atas, kami menggunakan fungsi mysqli_real_escape_string() untuk menapis. input pengguna Tapis mengikut nama dan kata laluan, dan sambung rentetan yang ditapis ke dalam pernyataan SQL. Dengan cara ini, walaupun input mengandungi aksara khas atau kata kunci SQL, mereka akan terlepas untuk mengelakkan serangan suntikan SQL. 🎜🎜Ringkasnya, terdapat banyak cara untuk menghalang serangan suntikan SQL dalam bentuk PHP, antaranya menggunakan pernyataan yang disediakan dan fungsi penapis adalah kaedah yang lebih biasa dan berkesan. Tidak kira kaedah yang digunakan, pastikan data yang dimasukkan oleh pengguna ditapis dan dikodkan dengan ketat untuk memastikan keselamatan tapak web dan integriti data. Pada masa yang sama, pembangun juga harus menjalankan semakan keselamatan dan imbasan kerentanan secara berkala untuk segera membaiki kemungkinan kelemahan keselamatan dan melindungi keselamatan maklumat tapak web dan pengguna. 🎜

Atas ialah kandungan terperinci Bagaimana untuk mengelakkan serangan suntikan SQL dalam bentuk 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