web安全之XSS攻击原理及防范

XSS攻击原理

XSS(Cross-Site Scripting,跨站脚本攻击)是一种常见的网络攻击方式。攻击者通过在受害者的浏览器中注入恶意脚本,来实现对受害者的会话劫持、敏感信息窃取等非法目的。但是在实际的项目开发中,除了少数企业外绝大多数公司的项目开发流程并不规范,关于安全更很少考虑,都是从服务端结合数据存储去处理请求。

XSS攻击主要分为以下几种类型:

  1. 反射型XSS:反射型XSS攻击是一种非持久性的攻击,它发生在恶意脚本从服务器端反射到客户端的过程中,通常涉及到用户通过点击一个链接或访问一个页面时,服务器端未经充分验证和转义的输入被直接输出到HTML中。

  2. 存储型XSS:又称为持久性xss,这种攻击一般在第三方欺诈网站上,恶意脚本存储于服务器端,如数据库、消息论坛等,当用户请求一个包含恶意脚本的页面时,服务器将恶意脚本发送给用户,执行攻击。

  3. DOM-based型XSS:恶意脚本完全在客户端执行,不涉及服务器端。攻击者通过操纵DOM结构,诱导浏览器执行恶意脚本,这种攻击也是我们比较常见,也是比较隐蔽的,因为攻击者不需要在服务器端插入恶意脚本。用来获取cookie等用户信息。

XSS防范措施

  1. 输入验证:对所有用户输入进行验证,不允许非法输入。例如,可以使用白名单来限制输入内容,只允许预期内的字符和格式。

  2. 输出编码:对输出数据进行编码,确保任何在HTML、JavaScript等中的用户数据都被正确地转义。这样可以避免恶意脚本被浏览器解释和执行。

    • HTML编码:例如,将<转换为&lt;,将>转换为&gt;

    • JavaScript编码:将<转换为\u003c,将>转换为\u003e等。

    • URL编码:将特殊字符转换为%后跟两位十六进制数。

    • CSS编码:如将url属性中的特殊字符进行转义。

  3. 使用HTTP响应头:设置X-XSS-Protection1; mode=block,可以使得浏览器在检测到XSS攻击时停止渲染页面。不过现代浏览器加入了 “内容安全策略CSP”,而且X-XSS-Protection主要针对反射型 XSS 攻击有效,对存储型或基于 DOM 的 XSS 攻击的防护能力有限。可能会将合法的网站功能识别为 XSS 攻击,导致正常内容被屏蔽。

  4. 实施内容安全策略(CSP):通过设置HTTP响应头中的内容安全策略CSP, Content-Security-Policy,可以指定哪些动态资源可以执行,从而阻止未授权的脚本执行,现代浏览器基本都支持。

  5. 使用安全的框架和库:许多现代Web框架提供了内置的防护机制,如ASP.NET的Anti-XSS库。

代码示例

以下是一个简单的Java过滤器示例,用于防范存储型XSS攻击:

@WebFilter("/page-url/*")
public class XSSFilter implements Filter {public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse res = (HttpServletResponse) response;chain.doFilter(req, res);String Referer = req.getHeader("Referer");if (Referer != null && Referer.contains("badScript")) {res.getWriter().write("You are trying to use XSS attacks, aren't you?");}}
}

解决方案

  1. 针对反射型XSS:确保所有动态内容都通过参数化查询,并实施输出编码。具体防范可以在开发中考虑一些输入验证、输出转义比如使用HTML实体编码来转义特殊字符,将 < 转换为 <,将 > 转换为 >。
  2. 针对存储型XSS:对所有用户输入进行验证和编码,并保持对所有存储数据的警惕,定期进行安全审计。具体操作有验证和转义输入数据、实施安全的编程实践比如避免使用 eval 和 innerHTML 等可能导致XSS的API、使用存储XSS过滤器、对动态生成的内容进行适当的编码,确保任何插入到HTML页面中的数据都不会被解释为脚本。
  3. 针对DOM-based型XSS:确保任何动态注入的DOM内容都经过严格的验证和编码。DOM 型 XSS 攻击,实际上就是网站前端 JavaScript 代码本身不够严谨,把不可信的数据当作代码执行了。
    在使用 remove]、outerHTML、removed 时要特别小心,不要把不可信的数据作为 HTML 插到页面上,而应尽量使用 .textContent、.setAttribute()设置内容的函数或者方法来替代插入dom片段等方法来规避这个问题。
    如果用 Vue/React 技术栈框架,并且不使用 v-html/dangerouslySetInnerHTML 功能,就在前端 render 阶段避免 innerHTML、outerHTML 的 XSS 隐患。
    DOM 中的内联事件监听器,如 location、onclick、onerror、onload、onmouseover等, 标签的 href 属性,JavaScript 的 eval()、setTimeout()、setInterval() 等,都能把字符串作为代码运行。如果不可信的数据拼接到字符串中传递给这些 API,很容易产生安全隐患,请务必避免。

通过实施上述措施,可以大幅提高Web应用的安全性,防止XSS攻击带来的危害。在开发过程中应持续关注安全最佳实践,最好能形成一套固定的方案来长期优化和维护,并定期进行安全测试和评估。

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

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

相关文章

RocketMQ Dashboard可视化工具

RocketMQ Dashboard 将 RocketMQ的相关指标展示在web页面 &#xff0c;支持以可视化工具代替 Topic 配置、Broker 管理等命令行操作。 官方文档地址&#xff1a;RocketMQ Dashboard | RocketMQ 目录 1.下载安装 1.1 系统要求&#xff1a; 1.2 源码安装 1.3 访问页面 2.功…

如何搭建开源知识库软件AFFiNE并实现公网环境远程协作【内网穿透】

目录 前言 1. 使用Docker安装AFFINE 2. 安装cpolar内网穿透工具 3. 配置AFFINE公网访问地址 4. 实现公网远程访问AFFINE 结语 作者简介&#xff1a; 懒大王敲代码&#xff0c;计算机专业应届生 今天给大家聊聊如何搭建开源知识库软件AFFiNE并实现公网环境远程协作【内网穿…

借势API电商数据采集汇总分析

电商数据采集的网页抓取数据、淘宝、天猫、京东等平台的电商数据抓取&#xff0c;网页爬虫、采集网站数据、网页数据采集软件、python爬虫、HTM网页提取、APP数据抓包、APP数据采集、一站式网站采集技术、BI数据的数据分析、数据标注等成为大数据发展中的热门技术关键词。那么电…

使用python读取yaml文件数据

使用python读取yaml文件&#xff1a; yaml文件数据&#xff1a;data.yaml login_data:url: http://www.baidu.comcase1:user1: password1: 12345errorText: 请输入用户名case2:user2: adminpassword2: errorText: 请输入密码case3:user3: adminpassword3: 123456errorText: 登…

ABAP CDS 笔记

文章目录 1.什么是abap cdsadap cds的优点 2.常用cds语法常用函数一 数值函数1.绝对值2. 最小整数不小于arg的值3.两个参数相除4.两个数相除切保留小数位5.最小整数不大于arg的值6.取除数的余数 二 字符串函数1.拼接字符2.替换字符3.截取字符串 三 常用的分支语句1.CASE 表达式…

19. 从零用Rust编写正反向代理, 配置数据的热更新原理及实现

wmproxy wmproxy是由Rust编写&#xff0c;已实现http/https代理&#xff0c;socks5代理&#xff0c; 反向代理&#xff0c;静态文件服务器&#xff0c;内网穿透&#xff0c;配置热更新等&#xff0c; 后续将实现websocket代理等&#xff0c;同时会将实现过程分享出来&#xff…

探索 Java 8 中的 Stream 流:构建流的多种方式

目录 前言 什么是 Stream 流&#xff1f; 创建 Stream 流 1. 从集合创建 Stream 2. 从数组创建 Stream 3. 使用 Stream.of 创建 Stream 4. 使用 Stream.generate 创建 Stream 5. 使用 Stream.iterate 创建 Stream Stream 流的操作 1. 过滤数据 2. 映射数据 …

01 ZigBee开发环境IAR搭建

链接&#xff1a;https://pan.baidu.com/s/18l8z9qajPBj2X5WzgjT0TA?pwd41qc 提取码&#xff1a;41qc 注意&#xff1a;安装包和注册机都要右击用管理员权限打开&#xff0c;安装过程中关闭杀毒软件&#xff08;否则后续程序不行&#xff09; 安装IAR-8051 以管理员身份运行E…

鸿蒙开发已解决-arkts编译报错-arkts-limited-stdlib错误

文章目录 项目场景:问题描述原因分析:解决方案:适配指导案例此Bug解决方案总结项目场景: arkts编译报错-arkts-limited-stdlib错误。 我用Deveco studio4.0 beta2开发应用,报arkts-limited-stdlib错误 报错内容为: ERROR: ArKTS:ERROR File: D:/prRevivw/3792lapplica…

行列式的计算

1、基本性质&#xff1a; 1&#xff09;行列式转置相等 2&#xff09;任意两行&#xff08;列&#xff09;成比例&#xff0c;行列式为0 3&#xff09;对换任意某两行&#xff08;列&#xff09;&#xff0c;行列式变号 4&#xff09;某一行&#xff08;列&#xff09;乘某…

Ubuntu下VsCode+CMake 交叉编译

参考连接&#xff1a; Ubuntu下VsCodeCMake 交叉编译 VSCode与CMake搭配使用之基本配置 VSCode与CMake搭配使用之交叉编译 step1: CtrlShiftp打开VSCode的指令面板&#xff0c;然后输入cmake:q ; 在窗口搜索&#xff1a;“ >CMake:Edit user-loacl CMake kits ”会打开一个…

SpringBoot集成阿里云短信实现发送短信验证码

SpringBoot集成阿里云短信实现发送短信验证码 一、准备工作1、注册账号2、申请资质3、申请签名4、创建模板 二、springboot集成发送短信1、引入依赖2、编写短信配置文件3、编写短信发送工具类 一、准备工作 在使用springboot集成短信服务之前&#xff0c;需要先注册阿里云的账…

VMware vSphere运维管理手册

适用版本:VMware vSphere 7.0 VMware vSphere 是 VMware 的虚拟化平台,可将数据中心转换为包括 CPU、存储和网络资源的聚合计算基础架构。vSphere 将这些基础架构作为一个统一的运行环境进行管理,并为您提供工具来管理加入该环境的数据中心。 ![[Pasted image 20231212132…

uni-app的学习【第二节】

四 路由配置及页面跳转 (1)路由配置 uni-app页面路由全部交给框架统一管理,需要在pages.json里配置每个路由页面的路径以及页面样式(类似小程序在app.json中配置页面路由) (2)路由跳转 uni-app有两种页面路由跳转方式:使用navigator组件跳转(标签式导航)、调用API跳…

使用Markdown编辑器

使用Markdown编辑器 本Markdown编辑器使用[StackEdit][6]修改而来&#xff0c;用它写博客&#xff0c;将会带来全新的体验哦&#xff1a; Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的…

比亚迪:从低谷中涅槃,内功造就辉煌

修炼内功才能绽放光芒吗? 比亚迪用自己的奋斗史证明~ 只有经历低谷的洗礼&#xff0c;才能铸就属于自己的辉煌。 比亚迪这家公司的发展历程可谓是一部从战略转型到今天这个行业翘楚的奋斗史&#xff0c;真是跌宕起伏令人唏嘘。早期比亚迪从一个传统企业转型到汽车行业&#xf…

git第一次提交代码到仓库(初始化提交)

要将代码提交到仓库&#xff0c;首先需要初始化一个git仓库。以下是在本地初始化一个新的git仓库的步骤&#xff1a; 打开命令行工具&#xff0c;进入到要初始化git仓库的目录下。 使用以下命令初始化git仓库&#xff1a; git init这将在当前目录下创建一个.git的隐藏文件夹&a…

电源模块常见温升测试方法分享 -纳米软件

温升测试是电器产品安规测试项目之一&#xff0c;是为了检测电器产品及部件的温度变化情况&#xff0c;判断是否符合要求。在设备运行过程中会释放一定的热量&#xff0c;如果内部温度过高会影响产品的性能和稳定性&#xff0c;导致绝缘性能下降&#xff0c;因此温升测试是确保…

ubuntu18.04安装部署环境

部署项目 云服务器放开端口&#xff0c;虚拟机关闭防火墙 # 防火墙状态&#xff0c;如果输出显示 Status: inactive&#xff0c;表示 UFW 处于禁用状态 sudo ufw status# 关闭防火墙 sudo ufw disable# 启动防火墙 sudo ufw enable# 设置防火墙默认策略的命令&#xff0c;将所…

sshpass 命令exit code 6 问题解决方法

近期在使用sshpass做自动化交互的脚本&#xff0c;结果运行命令后会返回错误码6,命令如下&#xff1a; sshpass -p 123456 ssh test192.168.1.100 "uname -a" 经搜索资料发现&#xff0c;错误码6指的是Host public key is unknown&#xff0c;也就是说要访问的地址是…