XSS 攻擊風險與防御實踐


? 框架與 XSS 防護概況

框架是否默認轉義高危場景建議防御措施
React? 是使用 dangerouslySetInnerHTML避免使用,必要時做內容清洗
Vue.js? 是使用 v-html避免使用,或使用 DOMPurify 清洗
Angular? 是使用 innerHTMLbypassSecurityTrustHtml謹慎繞過安全策略
Django (模板)? 是使用 `safe`
Flask / Jinja2? 是使用 `safe`
Spring Boot (Thymeleaf)? 是使用 th:utext默認 th:text 安全,慎用 utext
Express + EJS / Handlebars? 否直接拼接 HTML 輸出使用模板語法自動轉義
PHP 原生 / Smarty? 否直接 echo 用戶輸入使用 htmlspecialchars() + 模板轉義

📍 React 中的 XSS 風險

?? 危險代碼示例:

function Comment({ content }) {return <div dangerouslySetInnerHTML={{ __html: content }} />;
}

用戶輸入含 <script> 會被執行!

? 防御做法:

import DOMPurify from 'dompurify';<div dangerouslySetInnerHTML={{ __html: DOMPurify.sanitize(content) }} />

📍 Vue.js 中的 XSS 風險

?? 危險代碼示例:

<div v-html="userContent"></div>

? 防御做法:

import DOMPurify from 'dompurify';
this.safeContent = DOMPurify.sanitize(userContent);

📍 Angular 中的 XSS 風險

?? 危險代碼示例:

this.trusted = this.sanitizer.bypassSecurityTrustHtml(userInput);

? 防御做法:

  • 避免濫用 bypassSecurityTrustHtml
  • 使用默認綁定方式或手動清洗內容

📍 Django 模板中的 XSS 風險

?? 危險代碼示例:

{{ comment|safe }}

? 防御做法:

  • 避免使用 |safe,除非你非常確信內容安全
  • 默認 {{ comment }} 會自動 HTML 轉義

📍 Express + EJS 模板中的 XSS 風險

?? 危險代碼示例:

<div><%- userInput %></div> <!-- 非轉義輸出 -->

? 防御做法:

<div><%= userInput %></div> <!-- 自動 HTML 轉義 -->

📍 Spring Boot + Thymeleaf 的 XSS 風險

?? 危險代碼示例:

<span th:utext="${userInput}"></span>

? 防御做法:

<span th:text="${userInput}"></span> <!-- 自動 HTML 轉義 -->

🧠 總結建議

  • ? 默認轉義機制是第一道防線,慎重繞開!
  • 🚫 避免使用不安全輸出語法如 |safev-htmldangerouslySetInnerHTML
  • 🧼 推薦使用 DOMPurify 對富文本內容做清洗
  • 🔐 后端應區分內容用途,做針對性輸出處理

📌 推薦工具

  • 富文本清洗:DOMPurifyxss(Node.js 庫)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/75520.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/75520.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/75520.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Cesium 時間線 及 坐標轉換

文章目錄 Cesium 基礎理解&#xff08;二&#xff09;TimeLine & Clock 應用場景核心代碼實例及解釋代碼解釋 Cesium 之 實體動畫構建實體動畫的技巧1. 利用時間屬性2. 組合動畫效果3. 使用動畫曲線 優化點1. 減少屬性更新頻率2. 優化實體數量3. 合理使用材質和紋理 注意事…

ngx_regex_init

定義在 src\core\ngx_regex.c void ngx_regex_init(void) { #if !(NGX_PCRE2)pcre_malloc ngx_regex_malloc;pcre_free ngx_regex_free; #endif } NGX_PCRE21 #if !(NGX_PCRE2) 就為假 條件不成立 ngx_regex_init 函數就成了空實現 NGX_PCRE2 被定義&#xff0c;則表示 Ngin…

第二期:深入理解 Spring Web MVC [特殊字符](核心注解 + 進階開發)

前言&#xff1a; 歡迎來到 Spring Web MVC 深入學習 的第二期&#xff01;在第一期中&#xff0c;我們介紹了 Spring Web MVC 的基礎知識&#xff0c;學習了如何 搭建開發環境、配置 Spring MVC、編寫第一個應用&#xff0c;并初步了解了 控制器、視圖解析、請求處理流程 等核…

一文讀懂數據倉庫:從概念到技術落地

數據倉庫是一個面向主題的、集成的、相對穩定的、反映歷史變化的數據集合&#xff0c;用于支持管理決策。以下是關于數據倉庫的詳細介紹&#xff1a; 一、特點 面向主題&#xff1a;數據倉庫圍繞特定主題組織數據&#xff0c;如客戶、產品、銷售等&#xff0c;而不是像傳統數…

JavaScript學習18-css操作和事件處理程序(html/DOM0/DOM2)

一、css操作 第一種&#xff1a;容易出錯 第二種&#xff1a;有效避免錯誤 第三種&#xff1a; 二、事件處理程序 1.HTML事件 2.DOM0級事件處理 3.DOM2級事件處理

npm設置代理和取消代理

設置代理 具體代理端口要根據自己的來 npm config set proxy http://127.0.0.1:7890 npm config set https-proxy http://127.0.0.1:7890取消代理 npm config delete proxy npm config delete https-proxy查看代理 npm config get proxy # 應返回 null npm config get…

從零開始訓練Codebook:基于ViT的圖像重建實踐

完整代碼在文末&#xff0c;可以一鍵運行。 1. 核心原理 Codebook是一種離散表征學習方法&#xff0c;其核心思想是將連續特征空間映射到離散的碼本空間。我們的實現方案包含三個關鍵組件&#xff1a; 1.1 ViT編碼器 class ViTEncoder(nn.Module):def __init__(self, codebo…

大數據筆試題_第一階段配套筆試題02

已知一個字符類型的日期&#xff1a;2022-01-20&#xff0c;請用SQL顯示出此日期對應的下個月的月份&#xff0c;結果要求為Number類型&#xff08;202201&#xff09;。 參考答案 sql SELECT to_date(2022-01-20, yyyy-mm-dd) a1,add_months(to_date(2022-01-20, yyyy-mm-d…

C++實現對象單例模式

在 C 中實現單例模式有多種方法&#xff0c;以下是線程安全的現代 C 實現方式&#xff08;推薦 C11 及以上版本&#xff09;&#xff1a; 1. Meyers’ Singleton&#xff08;推薦&#xff09; class Singleton { public:// 刪除拷貝構造和賦值運算符Singleton(const Singleto…

企業常用Linux服務搭建

1.需要兩臺centos 7服務器&#xff0c;一臺部署DNS服務器&#xff0c;另一臺部署ftp和Samba服務器。 2. 部署DNS 服務器? #!/bin/bash# 更新系統 echo "更新系統..." sudo yum update -y# 安裝 BIND 和相關工具 echo "安裝 BIND 和相關工具..." sudo y…

UE5Actor模塊源碼深度剖析:從核心架構到實踐應用

UE5 Actor模塊源碼深度剖析:從核心架構到實踐應用 a. UE5 Actor模塊架構概述 在UE5引擎中,Actor扮演著至關重要的角色,它是整個游戲世界中各類可交互對象的基礎抽象。從本質上來說,所有能夠被放置到關卡中的對象都屬于Actor的范疇,像攝像機、靜態網格體以及玩家起始位置…

DreamDiffusion代碼學習及復現

論文解讀在這里 File path | Description /pretrains ┣ &#x1f4c2; models ┃ ┗ &#x1f4dc; config.yaml ┃ ┗ &#x1f4dc; v1-5-pruned.ckpt┣ &#x1f4c2; generation ┃ ┗ &#x1f4dc; checkpoint_best.pth ┣ &#x1f4c2; eeg_pretain ┃ ┗ …

用Python實現TCP代理

依舊是Python黑帽子這本書 先附上代碼&#xff0c;我在原書代碼上加了注釋&#xff0c;更好理解 import sys import socket import threading#生成可打印字符映射 HEX_FILTER.join([(len(repr(chr(i)))3) and chr(i) or . for i in range(256)])#接收bytes或string類型的輸入…

Pyinstaller 打包flask_socketio為exe程序后出現:ValueError: Invalid async_mode specified

Pyinstaller 打包flask_socketio為exe程序后出現&#xff1a;ValueError: Invalid async_mode specified 一、詳細描述問題描述 Traceback (most recent call last): File "app_3.py", line 22, in <module> File "flask_socketio\__init__.py"…

django REST framework(DRF)教程

Django DRF API Django 基本使用Django DRF序列化器Django DRF視圖Django DRF常用功能Django 基本使用 前后端分離開發模式認識RestFulAPI回顧Django開發模式Django REST Framework初探前后端分離開發模式 前后端分離前:前端頁面看到的效果都是由后端控制,即后端渲染HTML頁面…

【Linux】Orin NX + Ubuntu22.04配置國內源

1、獲取源 清華源 arm 系統的源,可以在如下地址獲取到 https://mirror.tuna.tsinghua.edu.cn/help/ubuntu-ports/ 選擇HTTPS,否則可能報錯: 明文簽署文件不可用,結果為‘NOSPLIT’(您的網絡需要認證嗎?)查看Orin NX系統版本 選擇jammy的源 2、更新源 1)備份原配…

【含文檔+PPT+源碼】基于微信小程序的社交攝影約拍平臺的設計與實現

項目介紹 本課程演示的是一款基于微信小程序的社交攝影約拍平臺的設計與實現&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習者。 1.包含&#xff1a;項目源碼、項目文檔、數據庫腳本、軟件工具等所有資料 2.帶你從零開始部署運行本套系…

JDBC常用的接口

一、什么是JDBC JDBC是Java語言連接數據庫的接口規范。 二、JDBC的體系 1、Java官方提供一個操作數據庫的抽象接口 抽象接口有很多的接口和抽象類。 例如&#xff1a;Driver、Connection、Statement。 2、各個數據庫廠商提供各自的Java實現類 需要各自實現具體的細節。 例如&am…

容器適配器-stack棧

C標準庫不只是包含了順序容器&#xff0c;還包含一些為滿足特殊需求而設計的容器&#xff0c;它們提供簡單的接口。 這些容器可被歸類為容器適配器(container adapter)&#xff0c;它們是改造別的標準順序容器&#xff0c;使之滿足特殊需求的新容器。 適配器:也稱配置器,把一…

[250403] HuggingFace 新增檢查模型與電腦兼容性的功能 | Firefox 發布137.0 支持標簽組

目錄 Hugging Face 讓尋找兼容的 AI 模型變得更容易Firefox 137 版本更新摘要 Hugging Face 讓尋找兼容的 AI 模型變得更容易 Hugging Face 是一個流行的在線平臺&#xff0c;用于訪問開源人工智能 (AI) 工具和模型。該平臺推出了一項有用的新功能&#xff0c;允許個人輕松檢查…