当前位置: 首页 > article >正文

Xss漏洞问题

https://bu1.github.io/2021/01/12/%E7%AC%AC%E5%8D%81%E4%BA%8C%E5%91%A8%EF%BC%9AXSS%E6%BC%8F%E6%B4%9E%E5%AD%A6%E4%B9%A0%E5%AE%9E%E6%88%98/

在这里插入图片描述
后端绕开了前端,直接调用接口入库:

<select οnchange=“alert(1)”>12

前端拿到这个文本后,再富文本编辑器中,会将其解析为js脚本,从而实现xss攻击。

原始方案一:
1、前端调用接口的时候,不进行转义

2、后端入库的时候转义

3、后端返回给前端,前端对转义的数据进行反转义,这样就保证了不会有问题。

这个方案理解上存在的问题:

1、前端进行反转义是浏览器的行为,而不是什么拦截器或者代码,组件的行为机制;

2、为什么给后端的数据会自动的进行转义,这个是Angular框架自动的行为,类似的Vue也存在这种机制。

在前端开发中,自动转义的目的是为了 防止 XSS 攻击确保用户输入的内容不会被浏览器误解析为 HTML 或 JavaScript 代码。当用户通过表单、URL 参数或其他方式输入数据时,如果这些输入数据未经处理直接插入到页面中,可能会导致恶意用户通过注入脚本来执行攻击。

前端自动转义的原因

  1. 防止 XSS 攻击
    XSS (跨站脚本攻击) 是一种常见的安全漏洞,攻击者可以通过注入恶意的 JavaScript 代码来执行一些不安全的操作,比如窃取用户信息或篡改页面内容。如果浏览器将用户输入的内容(如 <script>alert('XSS')</script>)直接渲染为 HTML 代码,那么攻击者的脚本就会被执行。

    为了防止这种情况,很多现代框架和工具会对用户输入进行自动转义,确保它被当作纯文本呈现,而不是被执行。

  2. 确保数据的安全性
    转义字符(如 &lt;, &gt;, &amp;, &quot;)会将特殊字符转换成 HTML 实体,使它们无法作为 HTML 或 JavaScript 执行。这就能确保无论数据如何传递,浏览器都只会将其当作普通文本处理。

Angular 中的自动转义

Angular 是一个现代的前端框架,具有 自动防止 XSS 攻击 的机制。Angular 在将模板中的用户输入渲染到 DOM 时,会自动对数据进行转义,从而防止恶意脚本注入。具体来说,Angular 使用了一个叫做 安全上下文(Security Context) 的概念。

1. Angular 默认的自动转义

Angular 会对绑定到模板中的用户输入进行自动转义。无论是通过 {{ expression }}[innerHTML] 插值,Angular 都会确保将用户提供的数据视为纯文本,而不会执行其中的 HTML 或 JavaScript 代码。

例子:

<div>{{ userInput }}</div>

如果 userInput 是来自用户的输入,Angular 会自动转义其中的 HTML 实体,如 < 被转义为 &lt;> 被转义为 &gt;,从而避免用户输入的内容被浏览器解释为 HTML 标签或 JavaScript 代码。

2. 插值绑定和属性绑定
  • 插值绑定:如 {{ userInput }},Angular 会自动将数据转义为文本。
  • 属性绑定:如 [innerHTML]="userInput",如果直接将用户输入的内容绑定到 innerHTML,Angular 默认 不转义,而是将其作为 HTML 渲染。这时,你需要小心处理用户输入,避免 XSS 攻击。
3. ng-bind 和 ng-bind-html
  • ng-bind:Angular 自动转义绑定的文本内容,类似于插值绑定 {{}},并防止执行其中的 HTML 和 JavaScript。
  • ng-bind-html:Angular 在将内容绑定到 innerHTML 时不会进行转义,需要手动处理 用户输入来防止 XSS。为了防止不安全的 HTML 被渲染,你可以使用 Angular 提供的 DomSanitizer 服务来清理内容。

DomSanitizer 防止 XSS

在 Angular 中,如果你必须通过 innerHTML 渲染用户输入的内容,推荐使用 DomSanitizer 来清理不安全的 HTML,确保内容不会被执行。DomSanitizer 允许你标记安全的 HTML 内容。

示例

import { DomSanitizer, SafeHtml } from '@angular/platform-browser';@Component({selector: 'app-component',template: `<div [innerHTML]="safeHtmlContent"></div>`
})
export class MyComponent {safeHtmlContent: SafeHtml;constructor(private sanitizer: DomSanitizer) {}ngOnInit() {const userInput = '<script>alert("XSS")</script>';this.safeHtmlContent = this.sanitizer.bypassSecurityTrustHtml(userInput);}
}

在这个例子中,bypassSecurityTrustHtml 将用户输入的 HTML 标记为 信任的 HTML,Angular 不会对其进行自动转义。但通常,如果可能,应该避免直接使用 innerHTML,并考虑使用其他方式来安全地显示内容。

总结

  • Angular 自动转义:对于大多数插值绑定,Angular 会自动对用户输入进行转义,确保它们不会被浏览器解释为 HTML 或 JavaScript。
  • 手动控制转义:如果使用 innerHTML 或类似方法直接渲染用户输入,需要小心 XSS 问题,可以使用 Angular 提供的 DomSanitizer 进行处理。
  • 为什么自动转义:转义的目的是为了防止 XSS 攻击,确保用户输入不会执行恶意代码。

最终方案:
前端不变,后端在入库的时候,再进行一次转义。
前端进行转义后,后端再继续转义,不会有问题!因为转义只是对<等符号进行处理,两次转义后应该结果是相同的。
前端拿到转义的文字,在渲染的时候进行渲染,也不会有问题。

xss攻击基本知识:
未经转义的文本 会被浏览器解析并执行其中的 JavaScript(例如 )。
已转义的文本(例如 <script>alert(‘XSS’)</script>)会被浏览器当作普通文本显示,而不会执行其中的 JavaScript 代码。
双重转义不会造成安全问题,因为浏览器会把转义后的字符当做普通文本处理,不会执行其中的 JavaScript。
前端和后端的双重转义 可以确保更高的安全性,但它是冗余的,并且会增加字符的长度和复杂度。
前端渲染 转义后的内容时,浏览器会正确显示转义字符,不会有问题。

相关文章:

Xss漏洞问题

https://bu1.github.io/2021/01/12/%E7%AC%AC%E5%8D%81%E4%BA%8C%E5%91%A8%EF%BC%9AXSS%E6%BC%8F%E6%B4%9E%E5%AD%A6%E4%B9%A0%E5%AE%9E%E6%88%98/ 后端绕开了前端&#xff0c;直接调用接口入库&#xff1a; <select οnchange“alert(1)”>12 前端拿到这个文本后&…...

Python MongoDB速成教程

一、基础 1. 安装pymongo库 pymongo 是 Python 操作 MongoDB 的官方驱动&#xff0c;你可以使用 pip 来安装它&#xff1a; pip install pymongo 2. 连接到 MongoDB 首先&#xff0c;你需要建立与 MongoDB 服务器的连接。以下是一个简单的示例&#xff1a; from pymongo …...

Docker概念与架构

文章目录 概念docker与虚拟机的差异docker的作用docker容器虚拟化 与 传统虚拟机比较 Docker 架构 概念 Docker 是一个开源的应用容器引擎。诞生于 2013 年初&#xff0c;基于 Go 语言实现。Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中&#xf…...

基于opencv消除图片马赛克

以下是一个基于Python的图片马赛克消除函数实现&#xff0c;结合了图像处理和深度学习方法。由于马赛克消除涉及复杂的图像重建任务&#xff0c;建议根据实际需求选择合适的方法&#xff1a; import cv2 import numpy as np from PIL import Imagedef remove_mosaic(image_pat…...

3.使用ElementUI搭建侧边栏及顶部栏

1. 安装ElementUI ElementUI是基于 Vue 2.0 的桌面端组件库。使用之前&#xff0c;需要在项目文件夹中安装ElementUI&#xff0c;在终端中输入以下命令&#xff0c;进行安装。 npm i element-ui -S并在main.js中引入ElementUI 2. 使用elmentUI组件进行页面布局 2.1 清空原…...

golang将大接口传递给小接口以及场景

文章目录 golang将大接口传递给小接口背景什么是大接口传递给小接口使用场景 golang将大接口传递给小接口 背景 在 Go 语言中&#xff0c;接口是一种强大的工具&#xff0c;它允许我们定义对象的行为而不关心其具体实现。特别是在复杂的应用程序中&#xff0c;将一个实现了较…...

C# OPC DA获取DCS数据(提前配置DCOM)

OPC DA配置操作手册 配置完成后&#xff0c;访问远程ip&#xff0c;就能获取到服务 C#使用Interop.OPCAutomation采集OPC DA数据&#xff0c;支持订阅&#xff08;数据变化&#xff09;、单个读取、单个写入、断线重连...

不同开发语言之for循环的用法、区别总结

一、Objective-C &#xff08;1&#xff09;标准的c风格 for (int i 0; i < 5; i) {NSLog("i %d", i); } &#xff08;2&#xff09;for in循环。 NSArray *array ["apple", "banana", "orange"]; for (NSString *fruit in …...

MuBlE:为机器人操作任务规划提供了逼真的视觉观察和精确的物理建模

2025-03-05&#xff0c;由华为诺亚方舟实验室、捷克技术大学和帝国理工学院联合开发的MuBlE&#xff08;MuJoCo and Blender simulation Environment&#xff09;模拟环境和基准测试。通过结合MuJoCo物理引擎和Blender高质量渲染&#xff0c;为机器人操作任务规划提供了逼真的视…...

工具介绍《HACKBAR V2》

HackBar V2 是一款功能强大的浏览器渗透测试工具&#xff0c;主要用于测试 SQL 注入、XSS 漏洞、POST 传参等安全场景。以下是其核心功能、用法及实际案例操作的综合介绍&#xff1a; 一、核心功能与用法详解 1. 基础操作 Load URL 功能&#xff1a;将当前浏览器地址栏的 URL …...

ASP.NET Core 6 MVC 文件上传

概述 应用程序中的文件上传是一项功能&#xff0c;用户可以使用该功能将用户本地系统或网络上的文件上传到 Web 应用程序。Web 应用程序将处理该文件&#xff0c;然后根据需要对文件进行一些验证&#xff0c;最后根据要求将该文件存储在系统中配置的用于保存文件的存储中&#…...

2025年03月07日Github流行趋势

项目名称&#xff1a;ai-hedge-fund 项目地址url&#xff1a;https://github.com/virattt/ai-hedge-fund项目语言&#xff1a;Python历史star数&#xff1a;12788今日star数&#xff1a;975项目维护者&#xff1a;virattt, seungwonme, KittatamSaisaard, andorsk, arsaboo项目…...

JAVA入门——网络编程简介

自己学习时的笔记&#xff0c;可能有点水&#xff08; 以后可能还会补充&#xff08;大概率不会&#xff09; 一、基本概念 网络编程三要素&#xff1a; IP 设备在网络中的唯一标识 端口号 应用软件在设备中的唯一标识两个字节表示的整数&#xff0c;0~1023用于知名的网络…...

Cursor + IDEA 双开极速交互

相信很多开发者朋友应该和我一样吧&#xff0c;都是Cursor和IDEA双开的开发模式:在Cursor中快速编写和生成代码&#xff0c;然后在IDEA中进行调试和优化 在这个双开模式的开发过程中&#xff0c;我就遇到一个说大不大说小不小的问题&#xff1a; 得在两个编辑器之间来回切换查…...

3.3.2 用仿真图实现点灯效果

文章目录 文章介绍Keil生成.hex代码Proteus仿真图中导入.hex代码文件开始仿真 文章介绍 点灯之前需要准备好仿真图keil代码 仿真图参考前文&#xff1a;3.3.2 Proteus第一个仿真图 keil安装参考前文&#xff1a;3.1.2 Keil4安装教程 keil新建第一个项目参考前文&#xff1a;3.1…...

点云软件VeloView开发环境搭建与编译

官方编译说明 LidarView / LidarView-Superbuild GitLab 我的编译过程&#xff1a; 安装vs2019&#xff0c;windows sdk&#xff0c;qt5.14.2&#xff08;没安装到5.15.7&#xff09;&#xff0c;git&#xff0c;cmake3.31&#xff0c;python3.7.9&#xff0c;ninja下载放到…...

Java入门:环境搭建与第一个HelloWorld程序

一、环境搭建前的准备 1. JDK vs JRE的区别 JRE&#xff08;Java Runtime Environment&#xff09;&#xff1a;只能运行Java程序JDK&#xff08;Java Development Kit&#xff09;&#xff1a;包含JRE 开发工具&#xff08;javac/java等&#xff09; ❗ 结论&#xff1a;开…...

PDF处理控件Aspose.PDF,如何实现企业级PDF处理

PDF处理为何成为开发者的“隐形雷区”&#xff1f; “手动调整200页PDF目录耗时3天&#xff0c;扫描件文字识别错误导致数据混乱&#xff0c;跨平台渲染格式崩坏引发客户投诉……” 作为开发者&#xff0c;你是否也在为PDF处理的复杂细节消耗大量精力&#xff1f;Aspose.PDF凭…...

大白话如何利用 CSS 实现一个三角形?原理是什么?

大白话如何利用 CSS 实现一个三角形&#xff1f;原理是什么&#xff1f; 答题思路 先说明实现三角形的方法基础&#xff1a;即利用 CSS 中元素的边框特性来构建三角形&#xff0c;让读者对整体思路有个初步概念。详细阐述具体的实现步骤&#xff1a;包括设置元素的基本样式&a…...

js操作字符串的常用方法

1. 查找和截取​​​​​​​ 1.1 indexOf 作用&#xff1a;查找子字符串在字符串中首次出现的位置。 是否改变原字符串&#xff1a;不会改变原字符串。 返回值&#xff1a;如果找到子字符串&#xff0c;返回其起始索引&#xff08;从 0 开始&#xff09;&#xff1b;如果未…...

PostgreSQL 如何有效地处理数据的加密和解密

对安全级别要求较高的项目&#xff0c;对敏感数据都要求加密保存。 在 PostgreSQL 中处理数据的加密和解密可以通过多种方式实现&#xff0c;以确保数据的保密性和安全性。 我这里提供几种常见的方法。 一、使用 pgcrypto 扩展 pgcrypto 是 PostgreSQL 中一个常用的扩展&am…...

《2025年软件测试工程师面试》消息队列面试题

消息队列 消息队列&#xff08;Message Queue&#xff0c;简称 MQ&#xff09;是一种应用程序之间的通信方法。 基本概念 消息队列是一种先进先出&#xff08;FIFO&#xff09;的数据结构&#xff0c;它允许一个或多个消费者从队列中读取消息&#xff0c;也允许一个或多个生产者…...

大数据学习(55)-BI工具数据分析的使用

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 承认自己的无知&#xff0c;乃是开启智慧的大门 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91…...

原生android 打包.aar到uniapp使用

1.原生安卓里面引入uniapp官方提供的包文件&#xff1a; uniapp-v8-release.aar 2.提供uniapp调用的接口&#xff0c;新建类文件继承UniModule&#xff0c; package com.dermandar.panoramal;import com.scjt.lib.certlib;import io.dcloud.feature.uniapp.annotation.UniJSM…...

解锁MacOS开发:环境配置与应用开发全攻略

✨✨✨这里是小韩学长yyds的BLOG(喜欢作者的点个关注吧) ✨✨✨想要了解更多内容可以访问我的主页 小韩学长yyds-CSDN博客 目录 引言 一、MacOS 开发环境配置 &#xff08;一&#xff09;必备工具安装 &#xff08;二&#xff09;集成开发环境&#xff08;IDE&#xff09;选…...

Aruco 库详解:计算机视觉中的高效标记检测工具

1. 引言&#xff1a;Aruco 在计算机视觉中的重要性 在计算机视觉领域&#xff0c;标记&#xff08;Marker&#xff09;检测和识别是许多应用的基础&#xff0c;包括 机器人导航、增强现实&#xff08;AR&#xff09;、相机标定&#xff08;Calibration&#xff09;以及物体跟踪…...

第005文-模拟入侵网站实现0元购

1、部署导入靶场&#xff0c;部署购物网站 首先在虚拟机中新增一个centos虚拟机&#xff0c;在上面部署一套完整的购物网站&#xff0c;使用mysql数据库&#xff0c;访问端口是80。这个新增的centos虚拟机就是我们的靶场。购物网站在网上随便找一套开源的部署即可。 2、在网站…...

unity3d 背景是桌面3d数字人,前面是web的表单

是可以实现的&#xff0c;但涉及多个技术栈的结合&#xff0c;包括 Unity3D、Web 技术&#xff08;HTML、JavaScript&#xff09;、以及可能的 WebGL 或 WebRTC 技术。大致有以下几种实现方案&#xff1a; 方案 1&#xff1a;Unity 作为独立应用&#xff08;桌面端&#xff0…...

23种设计模式简介

一、创建型&#xff08;5种&#xff09; 1.工厂方法 总店定义制作流程&#xff0c;分店各自实现特色披萨&#xff08;北京店-烤鸭披萨&#xff0c;上海店-蟹粉披萨&#xff09; 2.抽象工厂 套餐工厂&#xff08;家庭装含大披萨薯条&#xff0c;情侣装含双拼披萨红酒&#…...

淘宝关键字搜索接口爬虫测试实战指南

在电商数据分析和市场研究中&#xff0c;通过关键字搜索获取淘宝商品信息是一项重要任务。淘宝开放平台提供了 item_search 接口&#xff0c;允许开发者通过关键字搜索商品&#xff0c;并获取商品列表及相关信息。本文将详细介绍如何设计并测试一个基于该接口的爬虫程序&#x…...