保護您的PHP 應用程式涉及保護其免受常見漏洞的影響,例如SQL 注入、跨站點腳本(XSS)、跨站點請求偽造(CSRF)、會話劫持和文件包含攻擊。這是一個帶有逐部分描述的實踐範例,可幫助您了解如何保護 PHP 應用程式。
1. 防止SQL注入
當攻擊者可以將惡意 SQL 語句注入您的查詢時,就會發生 SQL 注入。將準備好的語句與參數化查詢一起使用可以避免這種情況。
範例:
<?php // Insecure version $user_id = $_GET['id']; $query = "SELECT * FROM users WHERE id = '$user_id'"; $result = mysqli_query($connection, $query); // Secure version $user_id = $_GET['id']; $stmt = $connection->prepare("SELECT * FROM users WHERE id = ?"); $stmt->bind_param("i", $user_id); // "i" for integer $stmt->execute(); $result = $stmt->get_result(); ?>
說明:
- 準備好的語句將 SQL 查詢與資料分開,防止惡意程式碼注入。
- bind_param 將 $user_id 綁定到 SQL 語句,不允許直接輸入修改查詢結構。
2. 防止跨站腳本(XSS)
當攻擊者將惡意腳本注入其他使用者檢視的網頁時,就會發生 XSS。為了避免這種情況,請始終對輸出進行清理和編碼。
範例:
<?php // Insecure version echo "<p>Welcome, " . $_GET['username'] . ""; // Secure version echo "<p>Welcome, " . htmlspecialchars($_GET['username'], ENT_QUOTES, 'UTF-8') . "</p>"; ?>
說明:
- htmlspecialchars 將特殊字元(如 )轉換為 HTML 實體,中和使用者輸入中嵌入的任何腳本。
- ENT_QUOTES 轉義單引號和雙引號,使 HTML 屬性中的輸出更安全。
3. 防止跨站請求偽造(CSRF)
當攻擊者誘騙使用者在使用者不知情的情況下在網站上執行操作時,就會發生 CSRF。透過使用令牌來防止CSRF。
範例:
<?php // Generate CSRF token session_start(); if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } // Add token to form echo '<form method="POST" action="submit.php">'; echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">'; echo '<input type="text" name="data">'; echo '<input type="submit" value="Submit">'; echo ''; ?>
在submit.php中:
<?php session_start(); if ($_POST['csrf_token'] !== $_SESSION['csrf_token']) { die("CSRF token validation failed."); } // Process form data $data = $_POST['data']; ?>
說明:
- 每個會話都會產生一個唯一的 CSRF 令牌,並作為隱藏欄位新增至表單。
- 提交表單時,將檢查令牌。如果與儲存的會話令牌不匹配,則請求將被拒絕。
4. 防止會話劫持
保護您的會話以避免會話劫持。這包括設定嚴格的會話配置和重新產生會話ID。
範例:
<?php session_start(); // Regenerate session ID to avoid fixation attacks session_regenerate_id(true); // Configure secure session parameters ini_set('session.cookie_httponly', 1); // Prevent JavaScript access to session cookies ini_set('session.cookie_secure', 1); // Ensure cookies are sent over HTTPS ini_set('session.use_strict_mode', 1); // Prevent accepting uninitialized session IDs // Set session timeout $_SESSION['LAST_ACTIVITY'] = time(); // update last activity time if (time() - $_SESSION['LAST_ACTIVITY'] > 1800) { // 30 minutes timeout session_unset(); session_destroy(); session_start(); } ?>
說明:
- session_regenerate_id(true) 產生新的會話ID,降低會話固定的風險。
- 設定 cookie_httponly 和 cookie_secure 有助於透過限制 JavaScript 和不安全(非 HTTPS)存取來防止 cookie 被盜。
5. 安全文件上傳
不受限制的檔案上傳可能會導致惡意檔案上傳並執行。始終驗證文件類型並安全地儲存它們。
範例:
<?php // Insecure version $user_id = $_GET['id']; $query = "SELECT * FROM users WHERE id = '$user_id'"; $result = mysqli_query($connection, $query); // Secure version $user_id = $_GET['id']; $stmt = $connection->prepare("SELECT * FROM users WHERE id = ?"); $stmt->bind_param("i", $user_id); // "i" for integer $stmt->execute(); $result = $stmt->get_result(); ?>
說明:
- 透過根據允許的類型陣列檢查檔案副檔名來僅允許特定的檔案類型。
- 將檔案儲存在 Web 根目錄之外,並使用 move_uploaded_file 確保無法透過直接 URL 存取它。
6. 使用內容安全策略 (CSP)
CSP 標頭可以透過限制資源載入位置來幫助防止 XSS 和資料注入攻擊。
範例(要加入 .htaccess 檔案或伺服器設定):
<?php // Insecure version echo "<p>Welcome, " . $_GET['username'] . ""; // Secure version echo "<p>Welcome, " . htmlspecialchars($_GET['username'], ENT_QUOTES, 'UTF-8') . "</p>"; ?>
說明:
- 此 CSP 限制資源僅從同源(自身)加載,並且允許來自 trustscripts.com 的 JavaScript。
- 這可以防止載入外部腳本或不受信任的資源,從而降低 XSS 風險。
7. 輸入驗證與清理
使用輸入驗證和清理來防止各種類型的注入。
範例:
<?php // Generate CSRF token session_start(); if (empty($_SESSION['csrf_token'])) { $_SESSION['csrf_token'] = bin2hex(random_bytes(32)); } // Add token to form echo '<form method="POST" action="submit.php">'; echo '<input type="hidden" name="csrf_token" value="' . $_SESSION['csrf_token'] . '">'; echo '<input type="text" name="data">'; echo '<input type="submit" value="Submit">'; echo ''; ?>
說明:
- FILTER_VALIDATE_INT 檢查年齡是否為有效整數。
- FILTER_SANITIZE_STRING 從使用者名稱中刪除所有 HTML 標籤或特殊字元。
透過實作這些方法,您的 PHP 應用程式將得到更好的保護,免受常見漏洞的影響。保持最新的最佳實踐並對您的程式碼持續應用安全措施非常重要。
與我聯絡:@ LinkedIn 並查看我的作品集。
請給我的 GitHub 專案一顆星 ⭐️
以上是保護您的 PHP 應用程式免受常見漏洞影響的基本安全實踐的詳細內容。更多資訊請關注PHP中文網其他相關文章!

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

Dreamweaver CS6
視覺化網頁開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

禪工作室 13.0.1
強大的PHP整合開發環境