當前位置: 首頁> 最新文章列表> 搭配htmlspecialchars() 替換前做XSS 處理

搭配htmlspecialchars() 替換前做XSS 處理

M66 2025-06-02

在Web開發中,XSS(跨站腳本攻擊)是一種常見且危險的安全漏洞。攻擊者通過注入惡意腳本代碼,使用戶在瀏覽網頁時執行了攻擊者設計的代碼,從而竊取敏感信息、劫持會話或篡改頁面內容。為了防止XSS攻擊,開發者需要對用戶輸入或動態內容進行嚴格的過濾和轉義處理。

本文將介紹如何利用PHP中的mb_eregi_replace()函數結合htmlspecialchars()函數,實現對用戶輸入的安全替換和輸出,達到防護XSS攻擊的目的,並在替換操作前做好安全處理。


一、XSS攻擊及防護的基礎

XSS攻擊主要發生在瀏覽器端,攻擊者將惡意腳本嵌入頁面,瀏覽器執行後導致攻擊。防護的關鍵在於對用戶輸入內容的過濾和轉義。

  • 過濾:移除或替換危險的標籤、屬性和腳本。

  • 轉義:將特殊HTML字符轉義成實體,防止瀏覽器將其當成代碼執行。

PHP的htmlspecialchars()函數是防止XSS的常用手段,它會將< > " ' &等字符轉換為對應的HTML實體,從而使瀏覽器以普通文本展示,而非執行代碼。


二、mb_eregi_replace函數簡介

mb_eregi_replace()是PHP中多字節字符串安全的正則替換函數,支持不區分大小寫的正則匹配,適合處理含有中文等多字節字符的字符串。

文法:

 mb_eregi_replace($pattern, $replacement, $string);

它可用於匹配並替換字符串中敏感詞或危險內容,是進行內容過濾的利器。


三、結合mb_eregi_replace和htmlspecialchars實現XSS防護

  1. 先使用htmlspecialchars()轉義輸入字符串<br> 這樣可以防止惡意的HTML或JS代碼被瀏覽器直接執行

  2. 再用mb_eregi_replace()對敏感詞或危險標籤進行過濾或替換<br> 例如,將<script>標籤替換為安全文本,避免攻擊腳本殘留

  3. 輸出安全處理後的內容,防止任何注入。


四、示例代碼

<?php
// 用戶輸入內容,可能包含惡意腳本
$input = '<script>alert("XSS攻擊")</script><b>正常文本</b>';

// 第一步:先轉義HTML特殊字符,防止瀏覽器執行腳本
$safe_input = htmlspecialchars($input, ENT_QUOTES, 'UTF-8');

// 第二步:替換敏感詞或標籤,這里以<script>為例,替換為“[被禁止標籤]”
$pattern = '<script.*?>.*?</script>';
$replacement = '[被禁止標籤]';

// 使用mb_eregi_replace替換敏感標籤,忽略大小寫
$filtered_input = mb_eregi_replace($pattern, $replacement, $safe_input);

// 輸出處理後的內容
echo $filtered_input;
?>

代碼說明:

  • htmlspecialchars()<>等符號轉義成實體,防止腳本執行。

  • mb_eregi_replace()用來匹配<script>標籤,忽略大小寫替換為提示文本。

  • 這樣,即使輸入中含有復雜的大小寫混合標籤,也能安全過濾。


五、注意事項

  • 替換時的正則表達式需足夠嚴謹,防止繞過。

  • 過濾並非萬能,結合白名單策略和內容安全策略(CSP)效果更佳。

  • 對不同環境(HTML、JavaScript、URL等)的輸出,需做對應的安全轉義。

  • mb_eregi_replace()適合多字節環境,避免亂碼。


六、總結

通過先對用戶輸入使用htmlspecialchars()進行轉義,接著利用mb_eregi_replace()函數對可能的惡意腳本標籤進行替換,可以有效提升PHP應用的XSS防護能力。在實際項目中,這樣的多層安全處理能夠大幅降低安全風險,保護用戶數據和系統安全。


示例代碼中涉及的URL域名示範:

 $url = "https://m66.net/path/to/resource";
echo "<a href=\"$url\">安全鏈接</a>";