首頁 >後端開發 >php教程 >什麼是 SQL 注入?以及如何預防

什麼是 SQL 注入?以及如何預防

Barbara Streisand
Barbara Streisand原創
2024-12-31 17:28:38326瀏覽

SQL Injection คืออะไร? และวิธีการป้องกัน

SQL注入

這是一種在使用 SQL(結構化查詢語言)作為資料庫管理語言的資料庫系統中常見的安全攻擊。當攻擊者將惡意 SQL 程式碼注入使用者輸入欄位(例如表單欄位或 URL)以不當存取或修改資料庫中的資料時,就會發生這種攻擊。

SQL 注入在 2021 年 OWASP Top 10 中排名第 3,這是開放 Web 應用程式安全項目 (OWASP) 列出的 Web 應用程式最常見和最重要的安全漏洞列表,該列表每次都會更新。多年來反映不斷變化的網路威脅

SQL Injection คืออะไร? และวิธีการป้องกัน

SQL 注入攻擊被列為第三大威脅,這表明了該問題在 Web 應用程式安全方面的重要性和普遍性。正確處理注入攻擊對於保護資訊系統和防止不必要的存取至關重要

如何攻擊SQL注入

SQL 注入攻擊可以透過多種不同方式進行,但最常見的有兩種:

  • 直接在輸入欄位中插入值
  • 編輯 URL 新增 SQL 語句

SQL 注入攻擊範例

假設有一個Web應用程式允許使用者使用PHP程式碼登入

<?php
$username = $_POST['username'];
$password = $_POST['password'];

$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
$result = mysqli_query($conn, $query);

if (mysqli_num_rows($result) > 0) {
    echo "Login successful!";
} else {
    echo "Invalid username or password.";
}
?>

此程式碼存在漏洞,因為將使用者值直接插入 SQL 語句中可能會導致 SQL 注入

SQL注入攻擊

駭客可以將惡意值插入到這樣的欄位

  • 使用者名字段 ' OR '1'='1
  • 密碼欄位 ' OR '1'='1

這使得 SQL 語句看起來像這樣

SELECT * FROM users WHERE username='' OR '1'='1' AND password='' OR '1'='1'

因為 '1'='1' 是一個總是為真的條件。此命令傳回資料庫中每個使用者的資訊。這使得駭客無需使用真實密碼即可登入

如何防止SQL注入

有多種方法可以防止 SQL 注入,例如

  • 使用準備好的語句
  • 使用預存程序
  • 過濾和驗證輸入資料。 ## 在 PHP 中使用準備語句的範例
<?php
$stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $username, $password);

$username = $_POST['username'];
$password = $_POST['password'];

$stmt->execute();
$result = $stmt->get_result();

if ($result->num_rows > 0) {
    echo "Login successful!";
} else {
    echo "Invalid username or password.";
}
?>

在這個範例中,SQL語句是預先準備好的,$username和$password值稍後插入到語句中。這使得注入惡意 SQL 程式碼變得不可能

總結

SQL 注入是一個嚴重的威脅。但是可以透過編寫安全程式碼來防止這種情況,例如使用準備好的語句和驗證輸入。良好的保護不僅有助於確保資料安全。但它也有助於維持系統的可靠性。

以上是什麼是 SQL 注入?以及如何預防的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn