首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 過濾不安全 HTML 代碼:基於正則的標簽與事件屬性清理函數

     編輯:PHP 相關知識

函數功能

uh($str) 使用 preg_replace 針對用戶提交的 HTML 內容進行清理,目標:

  • 移除多餘空白字符。
  • 過濾高危標簽:<script>, <iframe>, <style>, <html>, <body>, <title>, <link>, <meta>, <? ... ?>, <% ... %>。
  • 過濾所有標簽上的 JavaScript 事件屬性 (如 onclick, onload, onerror 等)。

核心代碼

function uh($str) {
    $farr = array(
        "/\s+/", // 多餘空白
        "/<(\/?)(script|i?frame|style|html|body|title|link|meta|\?|\%)([^>]*?)>/isU", // 高危標簽
        "/(<[^>]*)on[a-zA-Z]+\s*=([^>]*>)/isU" // 事件屬性
    );
    $tarr = array(
        " ", // 空白替換為單空格
        "<\\1\\2\\3>", // 保留標簽結構但大寫? 實際效果存疑,建議直接置空 ""
        "\\1\\2" // 移除事件屬性,保留標簽其餘部分
    );
    return preg_replace($farr, $tarr, $str);
}

代碼審計與風險

  1. 替換邏輯缺陷:第二條規則替換為 "<\\1\\2\\3>" 實際上**保留了標簽** (如 `
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved