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

前端、XSS(跨站脚本攻击,Cross-Site Scripting)

XSS 攻击的三种主要类型

存储型 XSS(持久型)

  • 原理:恶意脚本被永久存储在服务器(如数据库、评论内容),用户访问包含恶意脚本的页面时触发
  • 示例:攻击者在论坛的评论区提交 ,其他用户查看评论时自动执行。

反射型 XSS(非持久型)

  • 原理:恶意脚本作为URL 参数发送给服务器,服务器返回包含该参数的页面时触发。
  • 示例:用户点击伪装链接 http://xxx.com/search?q=,页面显示搜索结果时执行脚本

DOM 型 XSS

  • 原理:恶意脚本通过前端 DOM 操作直接修改页面内容,不经过服务器处理
  • 示例:攻击者利用 location.hash 或 document.write() 动态插入恶意代码。

XSS 攻击的危害

  • 窃取用户 Cookie(会话劫持
  • 伪造用户操作(如转账、发帖)
  • 钓鱼攻击(伪造登录页面)
  • 植入恶意软件

防御 XSS 的核心方法

1. 输入验证与过滤

  • 原则:对用户输入进行严格校验,过滤或转义危险字符(如 <, >, &, ", ')
// 示例:过滤 HTML 标签
function sanitizeInput(input) {return input.replace(/<[^>]*>/g, "");
}

注意:不要依赖前端验证,必须结合服务端验证。

2.输出编码

  • 原则:将用户输入的内容在输出到页面时进行编码,确保浏览器将其视为文本而非可执行代码。
HTML 内容:转义 <, >, & 等字符。function escapeHTML(str) {return str.replace(/[&<>'"]/g, tag => ({'&': '&amp;','<': '&lt;','>': '&gt;','"': '&quot;',"'": '&#39;'}[tag]));
}
  • HTML 属性:使用 setAttribute 或框架内置的绑定语法。
  • JavaScript 内容:避免直接将用户输入拼接进

3.使用安全的前端框架

  • 现代框架(如 React、Vue、Angular)默认会进行输出编码,避免 XSS:
// React 自动转义内容
<div>{userInput}</div> 例外:使用 dangerouslySetInnerHTML 或 v-html 时仍需手动过滤。

4. 设置 HTTP 安全头

  • Content Security Policy (CSP):限制脚本来源,禁止内联脚本:
Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com;
  • HttpOnly Cookie:防止 JavaScript 读取敏感 Cookie:
Set-Cookie: sessionId=abc123; HttpOnly; Secure

5. 避免直接操作 DOM

  • 使用 textContent 替代 innerHTML:
// 错误:可能执行恶意代码
element.innerHTML = userInput;// 正确:自动转义
element.textContent = userInput;

6. 其他措施

  • CORS 配置:限制跨域资源访问。
  • XSS 漏洞扫描:使用工具(如 OWASP ZAP、Burp Suite)定期检测。

防御示例:综合方案

  • 服务端(Node.js + Express):
const express = require("express");
const app = express();
const helmet = require("helmet");// 设置 CSP 和 HttpOnly
app.use(helmet());
app.use(helmet.contentSecurityPolicy({directives: {defaultSrc: ["'self'"],scriptSrc: ["'self'", "trusted-cdn.com"]}
}));
  • 前端(React):
function Comment({ text }) {// 自动转义用户输入return <div>{text}</div>;
}
  • 数据库层:

存储用户输入前进行过滤。

总结

  • 核心原则:永远不要信任用户输入!
  • 多层次防御:输入过滤 + 输出编码 + 安全框架 + HTTP 头 + 安全编码习惯。
  • 工具化:使用 CSP、现代框架、漏洞扫描工具降低风险。

相关文章:

前端、XSS(跨站脚本攻击,Cross-Site Scripting)

XSS 攻击的三种主要类型 存储型 XSS&#xff08;持久型&#xff09; 原理&#xff1a;恶意脚本被永久存储在服务器&#xff08;如数据库、评论内容&#xff09;&#xff0c;用户访问包含恶意脚本的页面时触发示例&#xff1a;攻击者在论坛的评论区提交 &#xff0c;其他用户查…...

第六节:图像基本操作-像素级操作

一、数字图像处理基础 1.1 图像数字化原理 数字图像本质上是二维离散信号&#xff0c;由按矩阵排列的像素点构成。每个像素点的数值代表特定位置的亮度或色彩信息... 1.2 OpenCV核心数据结构 import cv2 import numpy as np# 读取图像文件 img cv2.imread(image.jpg)# 获取…...

【东枫科技】代理销售 NVIDIA DGX Spark 您的桌上有一台 Grace Blackwell AI 超级计算机。

NVIDIA GB10 Grace Blackwell超级芯片 FP4 AI 性能达到 1,000 AI TOPS 128GB 一致、统一的系统内存 ConnectX-7 智能网卡 高达 4TB 存储空间 150毫米长 x 150毫米宽 x 50.5毫米高 NVIDIA DGX™ Spark 搭载 NVIDIA GB10 Grace Blackwell 超级芯片&#xff0c;以节能紧凑的外形提…...

即插即用!长安汽车复旦提出LMPOcc:长期记忆先验实现占用预测任务新SOTA

导读 在基于视觉的自动驾驶感知算法当中&#xff0c;3D语义占用预测任务可以出色的对静态场景和动态目标同时进行建模&#xff0c;实现细粒度的场景理解&#xff0c;目前受到了来自学术界和工业界的广泛关注。 ©️【深蓝AI】编译 论文题目&#xff1a;ConRFT: A Reinfo…...

Kubernetes弹性伸缩:让应用自动应对流量洪峰与低谷

&#x1f680; Kubernetes弹性伸缩&#xff1a;让应用自动应对流量洪峰与低谷 &#x1f30d; 什么是弹性伸缩&#xff1f; 弹性伸缩&#xff08;Auto Scaling&#xff09;是指系统能够根据实时负载自动调整计算资源&#xff0c;以优化性能并降低成本。在 Kubernetes&#xff0…...

深入解析 Linux/Unix 通信机制:从原理到观测实践

深入解析 Linux/Unix 通信机制&#xff1a;从原理到观测实践 配图建议&#xff1a;Linux系统架构与通信机制全景示意图 一、开篇&#xff1a;理解“一切皆文件”的哲学 Unix/Linux 操作系统的核心灵魂在于其独特的设计哲学。当 Dennis Ritchie 和 Ken Thompson 在贝尔实验室开…...

Vue 2.0 详解全教程(含 Axios 封装 + 路由守卫 + 实战进阶)

目录 一、Vue 2.0 简介1.1 什么是 Vue&#xff1f;1.2 Vue 2.x 的主要特性 二、快速上手2.1 引入 Vue2.2 创建第一个 Vue 实例 三、核心概念详解3.1 模板语法3.2 数据绑定3.3 事件绑定3.4 计算属性 & 侦听器 四、组件系统4.1 定义全局组件4.2 单文件组件&#xff08;*.vue …...

《Python星球日记》 第36天:线性代数基础

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 专栏&#xff1a;《Python星球日记》&#xff0c;限时特价订阅中ing 目录 一、标量、…...

使用 Spring Boot 构建 REST API

使用 Spring Boot 构建 REST API 使用 Spring Boot 构建 REST API1. Spring Initializr构建springboot2. API 合同 & JSONAPI 协定什么是 JSON&#xff1f; 3.先测试什么是测试驱动开发&#xff1f;测试金字塔Red&#xff0c; Green&#xff0c; Refactor 循环 4. 实施 GET…...

PHP分页显示数据,在phpMyadmin中添加数据

<?php $conmysqli_connect(localhost,root,,stu); mysqli_query($con,"set names utf8"); //设置字符集为utf8 $sql"select * from teacher"; $resultmysqli_query($con,$sql); $countmysqli_num_rows($result); //记录总条数$count。 $pagesize10;//每…...

Spring Boot操作MongoDB的完整示例大全

以下是基于Spring Boot操作MongoDB的完整示例大全&#xff0c;涵盖增删改查、聚合查询、索引、事务等核心功能&#xff1a; 一、基础CRUD操作 1. 环境配置 依赖配置&#xff08;pom.xml&#xff09; <dependency><groupId>org.springframework.boot</groupId…...

SpringCloud入门教程合集(1)-SpringCloud简介与Eureka+Feign实现服务注册中心、服务提供与服务消费

场景 SpringCloud 总体架构与核心子项目 SpringCloud 总体架构 1. 基础设施层 服务注册与发现&#xff1a;Eureka/Nacos 配置中心&#xff1a;Spring Cloud Config/Nacos 消息总线&#xff1a;Spring Cloud Bus 2. 服务通信层 负载均衡&#xff1a;Ribbon/LoadBalancer…...

【Linuc】深入理解 Linux 文件权限

文章目录 一、权限基础解析1. 权限三元组2. 权限类型与数字映射二、查看文件权限三、修改权限实战1. chmod 命令符号模式数字模式(推荐)2. chown 修改归属四、特殊权限机制1. SetUID (Set User ID)2. SetGID (Set Group ID)3. Sticky Bit五、高级权限管理1. 默认权限控制2. A…...

ExtraMAME:复古游戏的快乐“时光机”

嘿&#xff0c;小伙伴们&#xff01;今天电脑天空要给大家安利一款超有趣的软件——ExtraMAME&#xff01;如果你对复古街机游戏念念不忘&#xff0c;那它绝对能成为你的快乐源泉&#xff0c;带你瞬间穿越回那个充满游戏机的黄金时代。 ExtraMAME是一款基于MAME&#xff08;Mu…...

没有 Mac,如何把 iOS App 成功上架?

开发者的 iOS 上架折腾记&#xff1a;没有 Mac&#xff0c;也能搞定&#xff1f; 最近在帮朋友把一个跨平台 Flutter 项目上架到 App Store&#xff0c;结果被 iOS 上架的那套流程卡得头都大了。其实这也不是第一次碰壁了——每次到“申请证书 打包 上传”的时候&#xff0c…...

使用VMware Workstation pro 17.5.1在Windows上安装Ubuntu 24.04.2的 详细步骤

一、准备工作 1. 下载Ubuntu 24.04.2 ISO镜像 官方下载地址&#xff1a;Ubuntu 24.04.2 (Noble Numbat) 选择 ubuntu-24.04.2-desktop-amd64.iso&#xff08;桌面版&#xff09;或 ubuntu-24.04.2-live-server-amd64.iso&#xff08;服务器版&#xff09;。 2. 确认系统要求…...

栈与队列详解及模拟实现

目录 ​​一、栈&#xff08;Stack&#xff09;&#xff1a;后进先出​ ​​1.1 什么是栈​ ​​1.2 栈的使用​​ ​​1.3 栈的模拟实现​ ​​1.4 栈的经典应用​​ ​​二、队列&#xff08;Queue&#xff09;&#xff1a;先进先出​ ​​2.1 什么是队列 2.2 队列的使…...

Cursor无法SSH远程连接服务器免密登录问题

在本地机器和Ubuntu服务器之间实现SSH远程免密连接&#xff0c;可按如下步骤操作&#xff1a; 1. 生成SSH密钥对 在本地机器上开启终端&#xff0c;使用以下命令生成SSH密钥对&#xff1a; ssh-keygen -t rsa按提示操作&#xff0c;一般直接回车&#xff0c;这样密钥会生成在…...

【Vue】全局事件总线 TodoList 事件总线

目录 一、 实现所有组件看到x事件 二、 实现$on $off 以及 $emit 总结不易~ 本章节对我有很大的收获&#xff0c; 希望对你也是&#xff01;&#xff01;&#xff01; 本节素材已上传至Gitee&#xff1a;yihaohhh/我爱Vue - Gitee.com 全局事件总线图&#xff1a; 本节素材…...

动态规划背包问题

一、0-1背包问题 0-1背包问题就是给定n个物品和一个容量为C的背包&#xff0c;物品i的重量是Wi,其价值是Vi。问&#xff1a;应该如何选择装入背包的物品&#xff0c;使总价值最大且总重量不超过C&#xff1f; 1.确定状态表示 dp[i][j] 表示在背包容量为j时&#xff0c;从下标…...

ctfshow web入门 web49

信息收集 此%非彼%&#xff0c;%0a中的%不会被识别&#xff0c;因为识别之前就已经自动转化为了换行符 所以和之前一样的解法&#xff0c;没什么好说的 if(isset($_GET[c])){$c$_GET[c];if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|…...

AI+浏览器自动化:Nanobrowser Chrome 扩展的使用「详细教程」

AI+浏览器自动化:Nanobrowser Chrome 扩展的使用「详细教程」 一、前言二、Nanobrowser简介2.1 项目背景2.2 核心特性三、安装与配置3.1 安装方式3.1.1 Chrome Web Store安装3.1.2 手动安装最新版3.2 基本配置3.2.1 添加API Key3.2.2 选择模型3.2.3 其他设置四、核心功能详解4…...

【表设计】外键的取舍-分布式中逐渐消失的外键

在分布式大行其道的今天&#xff0c;为什么外键约束越来越少&#xff1f; 外键-数据链接带来强制完整性 在关系型数据库中&#xff0c;外键&#xff08;Foreign Key&#xff09;可以用于建立和强制两个表之间的数据链接。 在层次数据结构一篇的闭包表简单设计中&#xff0c;…...

HarmonyOS 5.0 分布式数据协同与跨设备同步​​

大家好&#xff0c;我是 V 哥。 使用 Mate 70有一段时间了&#xff0c;系统的丝滑使用起来那是爽得不要不要的&#xff0c;随着越来越多的应用适配&#xff0c;目前使用起来已经和4.3的兼容版本功能差异无碍了&#xff0c;还有些纯血鸿蒙独特的能力很是好用&#xff0c;比如&am…...

多行文本省略

方式1 兼容性不好 height: 100px; line-height: 25px; overflow: hidden; display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 4;方式2 利用浮动环绕、空白元素站位margin-top调整位置 <div class"wrap"><div class"more"…...

Adobe卸载清理工具Creative Cloud Cleaner Tool下载

Adobe Creative Cloud Cleaner Tool 是 Adobe 公司官方推出的一款卸载清理工具&#xff0c;主要用于清理 Creative Cloud 应用程序在安装、更新或卸载过程中可能遗留下来的错误配置文件、缓存、注册表项或其他系统级残留内容。相比一般的卸载程序&#xff0c;它更深入地处理系统…...

分布式、高并发-Day03

以下是 Day 3 详细学习内容&#xff08;线程池拒绝策略实战&#xff1a;DiscardOldestPolicy与CallerRunsPolicy&#xff0c;30 分钟完整计划&#xff09;&#xff0c;包含策略原理、分步代码实战和场景解析&#xff1a; &#x1f4d6; 今日学习目标 掌握DiscardOldestPolicy…...

高等数学第四章---不定积分(4.4有理函数的不定积分2)

&4.4有理函数的不定积分2 篇幅有限制&#xff0c;例题的解答会占大量字符&#xff0c;html限制字符为22000个左右。这里继续探讨上文的有理函数的不定积分。 一、三角函数有理式的不定积分 由 sin ⁡ x \sin x sinx, cos ⁡ x \cos x cosx 以及常数经过有限次加、减、…...

C++中指针使用详解(4)指针的高级应用汇总

C 中指针的高级应用非常丰富&#xff0c;掌握这些内容能让你写出更高性能、更底层控制力强的代码。下面是应用模块梳理和例子讲解。 目录预览 函数指针与回调机制指针数组 vs 数组指针指针与类成员函数&#xff08;成员函数指针&#xff09;智能指针&#xff08;unique_ptr, s…...

Java 8 非对称加密代码示例

以下是使用Java 8实现RSA非对称加密的完整代码示例&#xff0c;包括密钥生成、加密和解密过程。 1. 生成RSA密钥对 import java.security.*; import java.security.spec.PKCS8EncodedKeySpec; import java.security.spec.X509EncodedKeySpec; import java.util.Base64; impor…...

Linux环境基础与开发工具使用

1. Linux编译器vim 1.1 vim的基本概念讲解 vim有很多种模式&#xff0c;我们初学者常用的就是命令模式&#xff08;command mode&#xff09;、插入模式&#xff08;Insert mode&#xff09;和底行模式&#xff08;last line mode&#xff09;。 命令/正常模式(Normal mode) …...

【BUG】‘DetDataSample‘ object has no attribute ‘_gt_sem_seg‘

问题&#xff1a; 使用mmdetection框架使用COCO格式训练自定义数据集时&#xff0c;其中模型使用HTC模型时出现如下问题&#xff1a; AttributeError: ‘DetDataSample’ object has no attribute ‘_gt_sem_seg’. Did you mean: ‘gt_sem_seg’? results self(**data, mode…...

C# Winforms 本地化 多语言支持 字符串资源

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

ts bug 找不到模块或相应类型的声明,@符有红色波浪线

解决方法&#xff1a;在env.d.ts文件中添加以下代码&#xff0c;这段代码是一个 TypeScript 的声明文件&#xff0c;用于让 TypeScript 知道如何处理 Vue 单文件组件&#xff08;.vue 文件&#xff09;的导入。 /// <reference types"vite/client" /> // 声明…...

赛灵思 XCZU11EG-2FFVC1760I XilinxFPGAZynq UltraScale+ MPSoC EG

XCZU11EG-2FFVC1760I 是 Zynq UltraScale MPSoC EG 系列中性能最强的器件之一&#xff0c;集成了四核 ARM Cortex-A53 应用处理器、双核 Cortex-R5 实时处理器与 Mali-400 MP2 GPU&#xff0c;并结合了 653,100 个逻辑单元与丰富的片上存储资源&#xff0c;可满足高性能计算、A…...

VSCode|IDEA|PyCharm无缝接入DeepSeek R1实现AI编程

文章目录 前言一、流程简介1. 获取DeepSeek R1的API密钥2. 在编程软件中下载安装 Continue 插件**IDEA**PyCharm 3. 配置Continue文件 二、使用体验利用 DeepSeek R1进行 AI 编程 前言 本文将介绍如何在 VSCode|IDEA|PyCharm 软件中接入 DeepSeek R1 实现 AI 编程&#xff0c;…...

深入浅出 PostgreSQL:从历史演进到高阶优化技术

引言 PostgreSQL 是一个免费开源的对象关系型数据库&#xff0c;既支持传统的 SQL 查询&#xff0c;也支持 JSON 等非关系数据类型&#xff0c;因其高度可扩展性和社区活跃度&#xff0c;已成为众多互联网、金融和企业级应用的首选数据库 (Introduction to PostgreSQL - W3Sch…...

塔能水泵节能方案:精准驱动工厂能耗优化

在工厂的能源消耗体系中&#xff0c;水泵作为关键的动力设备&#xff0c;其运行效率直接关系到整体能耗水平。传统水泵在长期运行中&#xff0c;受设计局限、工艺成本约束等因素影响&#xff0c;普遍存在效率低下、能源浪费严重的问题。塔能科技针对这一痛点&#xff0c;推出了…...

SSCLMD模型代码实现详解

SSCLMD模型代码实现详解 1. 项目源码结构 SSCLMD项目的源码结构如下&#xff1a; SSCLMD-main/ ├── README.md ├── ST4.xlsx ├── Supplementary File.docx ├── code/ │ ├── calculating_similarity.py │ ├── data_preparation.py │ ├── data_…...

【coze】故事卡片(图片、音频、文字)

【coze】故事卡片&#xff08;图片、音频、文字&#xff09; 1、创建智能体2、添加人设与回复逻辑3、添加工作流&#xff08;1&#xff09;创建工作流&#xff08;2&#xff09;添加大模型节点&#xff08;3&#xff09;添加提示词优化节点&#xff08;4&#xff09;添加豆包图…...

限免开关实施版本保护措施,保证项目灰度发布安全

迭代用户限免权限校验业务 新增限免开关实现普通用户权益更新&#xff0c;实施版本保护措施&#xff0c;保证项目灰度发布安全&#xff1b; // 是否展示限免标识 func (t *BasePrivilegeService) IsPromotionFree(p consumParams) bool {// 限免开关isFreeUseOpen : p.cfg.Vip…...

C#中从本地(两个路径文件夹)中实时拿图显示到窗口中并接收(两个tcp发送的信号)转为字符串显示在窗体中实现检测可视化

多窗口源码 C#中从本地&#xff08;两个路径文件夹&#xff09;中实时拿图显示到窗口中并接收&#xff08;两个tcp发送的信号&#xff09;转为字符串显示在窗体中实现检测可视化资源-CSDN文库 读图结果展示 字符串结果展示 利用TCP调试工具创建两个tcp 再次启动程序 就链接…...

了解一下OceanBase中的表分区

OceanBase 是一个高性能的分布式关系型数据库&#xff0c;它支持 SQL 标准的大部分功能&#xff0c;包括分区表。分区表可以帮助管理大量数据&#xff0c;提高查询效率&#xff0c;通过将数据分散到不同的物理段中&#xff0c;可以减少查询时的数据扫描量。 在 OceanBase 中操…...

生成了一个AI算法

import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms # 1. 数据预处理 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,)) # MNIST单通道归一化 ]) train_da…...

C# 使用SunnyUI控件 (VS 2019)

前言&#xff1a;建议下载源码&#xff0c;源码中包含了各种控件的用法案例。 下载 帮助文档: 文档预览 - Gitee.comGitee: SunnyUI: SunnyUI.NET 是基于.NET Framework 4.0、.NET8、.NET9 框架的 C# WinForm UI、开源控件库、工具类库、扩展类库、多页面开发框架。GitHub: h…...

在 Win11 下安装 Wireshark 的详细步骤

目录 一、了解 Wireshark1. 作用和功能2. 使用步骤 二、下载安装包三、运行安装包四、使用 Wireshark1. 抓包2. 窗口介绍3. 过滤器&#xff08;显示 / 捕获过滤器&#xff09;4. 保存过滤后的报文1&#xff09;显示过滤器表达式2&#xff09;过滤表达式的规则 5. 封包列表6. 封…...

【AI提示词】六顶思考帽工具专家

提示说明 提供专业的六顶思考帽工具应用服务&#xff0c;帮助用户从多角度进行创新性问题解决。 提示词 # Role: 六顶思考帽工具专家## Profile - language: 中文 - description: 提供专业的六顶思考帽工具应用服务&#xff0c;帮助用户从多角度进行创新性问题解决 - backgr…...

解锁RAG:AI 2.0时代的“知识外挂”是如何炼成的?

——从原理到实战&#xff0c;揭秘检索增强生成如何颠覆传统AI 引言&#xff1a;当AI学会“开卷考试” 如果传统大模型是“闭卷学霸”&#xff0c;那RAG&#xff08;Retrieval-Augmented Generation&#xff0c;检索增强生成&#xff09;就是那个考试时带着“百科全书”的超级…...

使用 ANSYS SIwave 求解器在 ANSYS AEDT 中预测串行通道性能并生成眼图

PCB 仿真 如今&#xff0c;无线射频设备日益复杂&#xff0c;对大型复杂 PCB 设计进行准确、高效仿真的需求也随之增加。在设计流程的早期识别和预测潜在问题可以节省资源、时间和金钱。SIwave 可帮助您对现代高性能电子产品中典型的高速通道和完整的输电系统进行建模、仿真和…...

启发式算法-模拟退火算法

模拟退火算法是一种基于概率的启发式优化算法&#xff0c;用于解决大规模组合优化问题&#xff0c;其灵感来源于金属退火过程中的物理现象。其基本原理是从一个初始解开始&#xff0c;然后在当前解的邻域内随机生成一个新解&#xff0c;如果新解的目标函数值优于当前解&#xf…...