Cross Site Scripting (XSS)

攻击者会给网站发送可疑的脚本,可以获取浏览器保存的网站cookie, session tokens, 或者其他敏感的信息,甚至可以重写HTML页面的内容。


背景


XSS漏洞有不同类型,最开始发现的是存储型XSS和反射型XSS,2005,Amit Klein发现了基于DOM的XSS。



反射型XSS也叫不可持续XSS,当用户输入在错误消息、搜索结果或任何其他响应中立即由Web应用程序返回时,就会发生反射式XSS,这些响应包含用户作为请求的一部分提供的一些或全部输入,而不会在浏览器中安全地呈现这些数据,也不会永久存储用户提供的数据。在某些情况下,用户提供的数据甚至可能永远不会离开浏览器。


存储型XSS也叫可持续的XSS,存储型XSS通常发生在用户输入存储在目标服务器上时,例如在数据库、论坛、访客日志、评论字段等中。然后受害者能够从Web应用程序检索存储的数据,
而无需在浏览器中安全地呈现这些数据。随着HTML5和其他浏览器技术的出现,我们可以设想攻击有效负载被永久存储在受害者的浏览器中,例如HTML5数据库,而根本不会被发送到服务器。


基于DOM的XSS(或某些文本中称为“类型0 XSS”)是一种XSS攻击,其中攻击有效负载是通过修改原始客户端脚本在受害者浏览器中使用的DOM“环境”来执行的,这样客户端代码就会以“意外”的方式运行。也就是说,页面本身(即HTTP响应)没有改变,但由于DOM环境中发生的恶意修改,页面中包含的客户端代码执行方式不同。



不同类型的XSS

上述三种XSS分类存在重叠,2012年,研究会提议开始用新的词来识别XSS。

  • 服务端XSS
  • 客户端XSS

服务器端XSS发生在服务器生成的HTTP响应中包含不受信任的用户提供的数据时。这些数据的来源可能是请求,也可能是存储位置。因此,您可以同时拥有反射式服务器端XSS和存储式服务器端XSS。在这种情况下,整个漏洞都在服务器端代码中,浏览器只是呈现响应并执行其中嵌入的有效脚本。

客户端XSS发生在不信任的用户提供的数据用于使用不安全的JavaScript调用更新DOM时。如果可以将有效的JavaScript引入DOM,则JavaScript调用被视为不安全。这些数据的来源可能是DOM,也可能是由服务器发送的(通过AJAX调用或页面加载)。数据的最终来源可能是来自请求,或者是来自客户端或服务器上的存储位置。因此,您可以同时拥有反射式客户端XSS和存储式客户端XSS。有了这些新的定义,基于DOM的XSS的定义并没有改变。基于DOM的XSS只是客户端XSS的一个子集,其中数据的来源在DOM中,而不是来自服务器。

原文:Types of XSS | OWASP Foundation

 

推荐的服务端XSS防御方式

服务端XSS是由于在HTML响应中包含了不可信任的数据,最简单和最有力的服务端XSS防御方式为上下文敏感的服务器端输出编码

输入验证和数据清理也可以防止服务端XSS,但是难以正确。

推荐的客户端XSS防御方式

客户端XSS发生在不信任的数据于以不安全的JavaScript调用更新DOM时。针对客户端XSS最简单和最有效的防御是:
使用安全的JavaScript API

但是,开发人员经常不知道哪些JavaScript API是安全的,更不用说他们最喜欢的JavaScript库中的哪些方法是安全的。Dave Wichers在2012年OWASP AppSec USA的DOM XSS演讲中介绍了哪些JavaScript和jQuery方法是安全和不安全的。 如果你知道JavaScript方法是危险的,我们的主要建议是寻找一个安全的替代方法。如果你因为某种原因不能这样做,那么在将数据传递给不安全的JavaScript方法之前,可以在浏览器中进行上下文敏感的输出编码。OWASP的指导说明如何正确执行此操作,在DOM XSS预防备忘单中有所介绍。请注意,此指南适用于所有类型的客户端XSS,无论数据实际来自何处(DOM或服务器)。DOM based XSS Prevention - OWASP Cheat Sheet Series

 XSS攻击的后果

泄露用户的session cookie,允许攻击者劫持用户会话和控制用户账号,
其他伤害包含泄露用户的文件,安装特洛伊木马程序,将用户重定向至其他网站,修改内容呈现方式。

允许攻击者修改新闻稿或新闻项目的XSS漏洞可能会影响公司的股价或降低消费者的信心。
制药网站的XSS漏洞可能允许攻击者修改剂量信息,导致过量服用。
有关这些类型攻击的更多信息,请参阅Content_Spoofing。https://owasp.org/www-community/attacks/Content_Spoofing
 

如何发现XSS攻击

查找漏洞的最佳方法是执行代码的安全性审查,并查找所有可能通过HTTP请求将代码
插入HTML文档的地方。有很多HTML标签可以传递javascript文档,有一些工具如Nessus,Nikto和其他的一些工具可以帮助扫描这些缺陷,但是可能仅仅只发现表面问题。如果网站有一个地方是脆弱的,那么有很大可能其他地方也有问题。

 如何防护?

OWASP XSS预防作弊表Cross Site Scripting Prevention - OWASP Cheat Sheet Series描述了防止XSS的主要防御措施。此外,关闭所有Web服务器上的HTTP TRACE支持是至关重要的。即使在客户端禁用或不支持document.cookie的情况下,攻击者也可以通过Javascript窃取cookie数据。当用户将恶意脚本发布到论坛时,就会发起这种攻击,当另一个用户点击链接时,就会触发异步HTTP跟踪调用,从服务器收集用户cookie信息,然后将其发送到另一个恶意服务器,该服务器收集cookie信息,以便攻击者能够发起会话劫持攻击。通过在所有Web服务器上移除对HTTP TRACE的支持可以轻松减轻这种攻击。OWASP ESAPI项目用几种语言产生了一套可重复使用的安全组件,包括用于防止参数篡改和XSS攻击注入的验证和转义例程。此外,OWASP WebGoat项目培训应用程序提供了有关跨站脚本和数据编码的课程。

XSS语法

常见的是把XSS脚本嵌入<script>...</script> 标签,但是其他的标签也可以嵌入XSS脚本。

<body οnlοad=alert('test1')>


其他属性如 onmouseover, onerror.

onmouseover
<b οnmοuseοver=alert('Wufff!')>click me!</b>

onerror
<img src="http://url.to.file.which/not.exist" οnerrοr=alert(document.cookie);>


通过编码的URI格式 <IMG SRC=j&#X41vascript:alert('test2')>

将我们的脚本进行base64编码并放入META标签
<META HTTP-EQUIV="refresh"
CONTENT="0;url=data:text/html;base64,PHNjcmlwdD5hbGVydCgndGVzdDMnKTwvc2NyaXB0Pg">

 举例

1、获取cookie

<SCRIPT type="text/javascript">
var adr = '../evil.php?cakemonster=' + escape(document.cookie);
</SCRIPT>

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

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

相关文章

Linux中shell脚本中的运算

目录 一、运算符号 二、运算指令 三、练习 一、运算符号 加法-减法*乘法/除法%除法后的余数**乘方自加一--自减一 <小于<小于等于>大于>大于等于等于ji&#xff0c;jji*jj*i/jj/i%jj%i 二、运算指令 (()) ##((a12)) let ##let a12 expr ##expr 1 2 …

【数据结构】交换排序

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈数据结构 &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 冒泡、快速排序 1. 冒泡排序2. 快速…

城市群(Megalopolis)/城际(inter-city)OD相关研究即Open Access数据集调研

文章目录 1 城市群/城际OD定义2 理论模型与分析方法2.1 重力模型 Gravity Model2.2 干预机会模型 Intervening Opportunities Model2.3 辐射模型 Radiation Model 3 Issues related to OD flows3.1 OD Prediction3.2 OD Forecasting3.3 OD Construction3.4 OD Estimation 4 OD …

基于单片机的智能电子鼻的设计

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 技术交流认准下方 CSDN 官方提供的联系方式 文章目录 概要 一、智能电子鼻系统的设计方案1.1智能电子鼻系统的设计思路1.2智能电子鼻系统的设计流程图1.3智能电子鼻系统的硬件数…

source insight4菜单工具按钮变乱恢复

目录 1&#xff1a;问题现象2&#xff1a;修改方式2.1 找到config_all.xml2.2 修改config_all.xml 1&#xff1a;问题现象 在source insight4点击工具按钮的时候&#xff0c;把工具全部都折叠了&#xff0c;然后手动拉出来的时候就乱了。 2&#xff1a;修改方式 2.1 找到con…

【多线程面试题 三】、 run()和start()有什么区别?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a; run()和start()有什么区…

ffmpeg中examples编译报不兼容错误解决办法

ffmpeg中examples编译报不兼容错误解决办法 参考examples下的README可知&#xff0c;编译之前需要设置 PKG_CONFIG_PATH路径。 export PKG_CONFIG_PATH/home/user/work/ffmpeg/ffmpeg/_install_uclibc/lib/pkgconfig之后执行make出现如下错误&#xff1a; 基本都是由于库的版…

stm32的ADC采样率如何通过Time定时器进行控制

ADC采样率是个跟重要的概念. 手册上说可以通过Timer定时器进行触发ADC采样. 可我这边悲剧的是, 无论怎么样. ADC都会进行采样. 而且就算是TIM停掉也是一样会进行采样. 这就让我摸不着头脑了… 我想通过定时器动态更改ADC的采样频率. 结果不随我愿… 这到底是什么问题呢? 一…

哈希算法:如何防止数据库中的用户信息被脱库?

文章来源于极客时间前google工程师−王争专栏。 2011年CSDN“脱库”事件&#xff0c;CSDN网站被黑客攻击&#xff0c;超过600万用户的注册邮箱和密码明文被泄露&#xff0c;很多网友对CSDN明文保存用户密码行为产生了不满。如果你是CSDN的一名工程师&#xff0c;你会如何存储用…

uniapp实现webview页面关闭功能

实现思路&#xff1a; 1.关闭按钮是使用原生button添加的close属性。&#xff08;见page.json页面&#xff09; 2.监听关闭按钮的方法。&#xff08;onNavigationBarButtonTap&#xff09; 3.写实现关闭webview所有页面的逻辑。 废话不多说&#xff0c;直接上代码 1.page.…

【每日一题】合并两个有序数组

链接奉上&#xff1a;合并两个有序数组 目录 直接合并后排序&#xff1a;思路&#xff1a;代码实现&#xff1a; 双指针思路&#xff1a;代码实现&#xff1a; 直接合并后排序&#xff1a; 思路&#xff1a; 将nums2直接合并到nums1后边&#xff0c;并进行排序 代码实现&…

【多线程面试题 六】、 如何实现线程同步?

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 面试官&#xff1a; 如何实现线程同步&…

docker镜像仓库

Hlarbor harbor是一个开源的云原生镜像仓库&#xff0c; 它允许仓库用户存储&#xff0c;使用docker镜像。可以将harbor看做是私有的dockerhub&#xff0c;它提供了更新安全性和控制性&#xff0c; 让组织能够安全的存储和管理镜像。 harbor RBAC&#xff1a;基于角色访问控制…

html/css/javascript/js实现的简易打飞机游戏

源码下载地址 支持&#xff1a;远程部署/安装/调试、讲解、二次开发/修改/定制 视频浏览地址

ASP.NET WebApi 极简依赖注入

文章目录 环境服务类启动项注入使用依赖注入的优点 环境 .NET Core 7.0ASP.NET CoreVisual Studio 2022 服务类 public class T_TempService {public T_TempService(){}public void Test(){}}启动项注入 #region 依赖注入 builder.Services.AddTransient<T_TempService&g…

springBoot与Vue共同搭建webSocket环境

欢迎使用Markdown编辑器 你好&#xff01; 这片文章将教会你从后端springCloud到前端VueEleementAdmin如何搭建Websocket 前端 1. 创建websocket的配置文件在utils文件夹下websocket.js // my-js-file.js import { Notification } from element-ui // 暴露自定义websocket对…

NAT技术与代理服务器

目录 一、NAT与NAPT技术 1.NAT技术 2.NAPT技术 &#xff08;1&#xff09;四元组的唯一性 &#xff08;2&#xff09;数据的传输过程 &#xff08;3&#xff09;NAPT的缺陷 二、代理服务器 1.正向代理和反向代理 2.代理服务器的应用 &#xff08;1&#xff09;游戏加…

MySQL的数据库操作、数据类型、表操作

目录 一、数据库操作 &#xff08;1&#xff09;、显示数据库 &#xff08;2&#xff09;、创建数据库 &#xff08;3&#xff09;、删除数据库 &#xff08;4&#xff09;、使用数据库 二、常用数据类型 &#xff08;1&#xff09;、数值类型 &#xff08;2&#xff0…

【云原生】portainer管理多个独立docker服务器

目录 一、portainer简介 二、安装Portainer 1.1 内网环境下&#xff1a; 1.1.1 方式1&#xff1a;命令行运行 1.1.2 方式2&#xff1a;通过compose-file来启动 2.1 配置本地主机&#xff08;node-1&#xff09; 3.1 配置其他主机&#xff08;被node-1管理的节点服务器&…

尚硅谷Flume(仅有基础)

q 1 概述 1.1 定义 Flume 是Cloudera 提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系统。Flume 基于流式架构&#xff0c;灵活简单。 Flume最主要的作用就是&#xff0c;实时读取服务器本地磁盘的数据&#xff0c;将数据写入到HD…