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

web安全之跨站脚本攻击xss

定义:

在这里插入图片描述

后果

比如黑客可以通过恶意代码,拿到用户的cookie就可以去登陆了

分类

存储型

攻击者把恶意脚本存储在目标网站的数据库中(没有过滤直接保存),当用户访问这个页面时,恶意脚本会从数据库中被读取并在用户浏览器中执行。比如在那些允许用户评论的网站, 用户越多,中招的越多

在这里插入图片描述
流程在这里插入图片描述

反射型

攻击者通过构造恶意链接,诱使用户点击,恶意脚本随请求发送到目标网站服务器,服务器查看了链接以后以为用户要检索某些信息,并没有进行额外的过滤,服务器的数据库也不需要保存什么信息,就只是返回了对应的结果,浏览器只是把结果呈现在页面.
在这里插入图片描述
例子
在这里插入图片描述
反射型一般是利用网页的检索功能, 你输入的检索信息会显示在页面中在这里插入图片描述
如果url加一个script标签, 也就注入网页成为内容的一部分,浏览器就会去执行这个js代码
在这里插入图片描述

DOM型

攻击者在url中插入恶意代码,前端直接从url中获取恶意代码并且输出到页面,导致恶码被执行, 跟反射型很像,但浏览器并未把恶意代码发送给服务器, 是前端直接执行的. 比如url中的hash部分是不会发送给服务器的,即url前面的部分服务器照常请求,也就是浏览器的渲染分了两步走,给黑客留下可以攻击的漏洞
“#”部分的更改不会重新发送请求, 此页面将hash注入到了页面,黑客就可以利用这个点往页面注入内容, 比如获取cookie并发送等
在这里插入图片描述在这里插入图片描述

三者区别

DOM 型取出和执⾏恶意代码由浏览器端完成,不涉及将恶意脚本发送到服务器,属于前端JavaScript 自身的安全漏洞,而其他两种属于服务端的安全漏洞。

应对策略

对用户输入进行严格的验证和过滤

前端验证
  1. 通过h5表单属性,如pattern正则表达式模式,type字段的属性进行限制等;
  2. js中的动态验证: 通过对输入添加addevenlistener监听
服务端验证

无论客户端是否验证,都必须在服务器端再次验证输入。
可以使用后端语言的内置函数或正则表达式进行验证。

输入过滤

  1. 用户输入显示在网页上之前,将其中的特殊字符(如 <, >, &, ', ")转义,防止其被解释为脚本, 防止 XSS 攻击。
  2. URL 编码: 将 URL 中的特殊字符转换为 % 加上两位十六进制数的形式,以确保 URL 安全传输。
let userInput = 'hello world';
let encodedInput = encodeURIComponent(userInput);
console.log(encodedInput);  // hello%20world

限制用户输入的长度

防止缓冲区溢出和资源滥用。

内容安全策略CSP

在网关通过HTTP 响应头设Content-Security-Policy或者HTML 标签设置,本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行,从而防止恶意代码的注入攻击。
CSP 通过指定允许的资源来源,阻止了恶意脚本、样式表、图像等资源的加载。例如,通过配置 script-src,可以只允许从可信任的域名加载脚本,任何来自其他域名的脚本都会被阻止
在这里插入图片描述
在这里插入图片描述

http-only

黑客本质是想获取cookie拿到客人信息, 而Cookie有一个http-only属性,表示只能被http请求携带,不能通过客户端js脚本访问cookie,

textContent代替innerHTML(反射型)

所以前端应该避免使用innerHTML、document.write, v-html、dangerouslySetInnerHTML 把不可信的数据作为 HTML 插到页面上,而应尽量使用 textContent 等。
textContent 属性用于设置或获取一个元素的文本内容。与 innerHTML 不同,textContent 仅处理文本,不会解析 HTML 标签。

参考视频:
https://www.bilibili.com/video/BV1rg411v7B8/?spm_id_from=333.788&vd_source=bb7c78c7981f6b653a3daf2f416312cb
https://www.bilibili.com/video/BV1ww411p7DG/?spm_id_from=pageDriver&vd_source=bb7c78c7981f6b653a3daf2f416312cb

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • R-CNN、Fast R-CNN和Faster R-CNN:目标检测的进化之路
  • 什么叫图像的双边滤波,并附利用OpenCV和MATLB实现双边滤波的代码
  • 爬虫管理:开启企业大数据时代的智能信息搜集
  • 2024全球和国内最常用的弱密码,有没有你的?
  • vue3 + antd + typeScript 封装一个高仿的ProTable(2)
  • 关于Kafka的17个问题
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • 请你谈谈:spring bean的生命周期 - 阶段2:Bean实例化阶段
  • 【PostgreSQL】PostgreSQL 教程
  • 【python虚拟环境管理】【mac m3】 使用pipx安装poetry
  • ASP.NET第七章 --案例1
  • 关闭Ubuntu烦人的apport
  • rust编译安卓各个平台so库
  • 艺术与技术的交响曲:CSS绘图的艺术与实践
  • linux搭建mysql主从复制(一主一从)
  • @jsonView过滤属性
  • [LeetCode] Wiggle Sort
  • [nginx文档翻译系列] 控制nginx
  • 4个实用的微服务测试策略
  • HashMap剖析之内部结构
  • Traffic-Sign Detection and Classification in the Wild 论文笔记
  • ViewService——一种保证客户端与服务端同步的方法
  • vue-router 实现分析
  • Work@Alibaba 阿里巴巴的企业应用构建之路
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 力扣(LeetCode)357
  • 力扣(LeetCode)56
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 如何学习JavaEE,项目又该如何做?
  • 线上 python http server profile 实践
  • 移动端 h5开发相关内容总结(三)
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • 智能网联汽车信息安全
  • 转载:[译] 内容加速黑科技趣谈
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 如何在招聘中考核.NET架构师
  • 直播平台建设千万不要忘记流媒体服务器的存在 ...
  • # Spring Cloud Alibaba Nacos_配置中心与服务发现(四)
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #数学建模# 线性规划问题的Matlab求解
  • ()、[]、{}、(())、[[]]命令替换
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (HAL库版)freeRTOS移植STMF103
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (十二)python网络爬虫(理论+实战)——实战:使用BeautfulSoup解析baidu热搜新闻数据
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (新)网络工程师考点串讲与真题详解
  • (原創) 未来三学期想要修的课 (日記)
  • (转)甲方乙方——赵民谈找工作
  • .htaccess 强制https 单独排除某个目录
  • .NET Framework 4.6.2改进了WPF和安全性
  • .vue文件怎么使用_vue调试工具vue-devtools的安装