跨站脚本攻击(XSS)

JavaScript中跨站脚本攻击(XSS)的防范与调试 防御分层策略输入层:严格过滤(白名单>黑名单)输出层:自动转义(模板引擎>手动编码)运行时:CSP策略+Cookie安全标志应急响应流程fill:#333;color:#333;color:#333;fill:none;是否发现XSS漏洞是否已上线?立即回滚代码+清除缓存修复代码并增加单元测试审计日志+通知用户提交代码审查发布安全公告持续安全建设定期进行渗透测试(如每月1次)订阅安全公告(如Node.js Security WG)建立安全编码规范(如禁止eval() 阅读详情

概念

XSS攻击,通常指通过'HTML注入'篡改了网页,插入恶意脚本,大多数是javascript或者指向脚本的链接,在用户浏览网页的时候,控制用户浏览器的一种攻击。主要的攻击对象是当前用户的个人信息。

对于XSS攻击者来说,JavaScript工作在渲染后的浏览器环境中,无法控制用户浏览器发出的HTTP头。

XSS的三种类型

  • 反射型XSS:特点是黑客需要诱使用户点击一个恶意链接,才能攻击成功,反射型XSS也叫做‘非持久型XSS’,常用于钓鱼网站,获取用户的重要输入,用户密码等信息。工作原理是黑客给一个链接,这个链接恶意利用了网站的XSS漏洞,比如提交信息是参数是一个恶意脚本,当用户点击链接后,正常的网站已被嵌入恶意脚本,用户后续的操作都有可能受到威胁。

  • 存储型XSS:黑客在一个博客网站发表一个带有恶意javascript代码内容的博客,并被网站当做正常博客保存下来,所有访问该博客的用户,都会在他们浏览器执行这段恶意代码。这种也叫做持久性XSS。

  • DOM Based XSS:将用户输入的数据,用来修改页面的DOM节点造成脚本攻击的方式。

XSS Payload

XSS攻击成功后,即当前浏览的正常网站已经被嵌入恶意脚本。攻击者通过恶意脚本控制用户浏览器,这里的恶意脚本被称为"XSS Payload",实际上就是javascript脚本,所以能通过JavaScript脚本做到的事情,XSS Payload都能做到。

XSS Payload的攻击方式有如下几种:

  1. 获取用户登录cookie,通过想黑客地址请求一张并不存在的图片,并将cookie值作为请求参数。黑客就可以通过自己的请求日志中得到用户cookie值,并通过cookie登录用户的账号进行破坏。

  2. 有的网站会将关键cookie设置httponly属性,这样javascript就无法获取cookie值,但这并不能阻止黑客的行动,我不能登录,那就让你自己登录帮我执行破坏操作就行了,方式就是构建POST、GET请求,进行操作,比如找出删除一篇文章的Url,那么就构建这个Url,让用户不知不觉执行这个url就行了。

  3. 如果上述的功能post方式需要验证码,那么一般的XSS攻击会失效,不过有一些XSS会将验证码的链接发送到远程服务器,解析出验证码后,将值返回给当前的XSS Payload。

一般来说,用户之间发生交互行为的页面存在储存型XSS,则比较容易发起XSS Worm攻击。

XSS构造技巧

利用字符编码

如果用户变量中有特殊字符,那么系统会用"\"进行转义,如输入";alert(/XSS/),会被系统转义成:var redirectUrl = "\";alert(/XSS/);"这样参数就是一个字符串,但是如果页面是GBK/GB2312编码,"%c1\"这两个字符组合在一起就是一个Unicode字符,所以如果传递%c1";alert(/XSS/),那么转义后为:var redirectUrl = "%c1\";alert(/XSS/)",%c1会将转义字符\给吃掉,因此造成XSS攻击。

绕过长度限制

一些网站可能会对有可能产生XSS的地方设置变量长度限制,但攻击者可以不插入javascript脚本,而是通过标签自带的onclick事件配合隐藏在location.hash的恶意脚本进行攻击。另一个方式则是通过注释带有长度限制的文本框,打通两个文本框来输入较长字数的javascript脚本。

使用<base>标签

<base>标签用于定义页面上所有使用相对路径标签的hosting地址。攻击者如果在页面插入<base>标签,就可以通过在远程服务器上伪造图片、链接或者脚本,劫持当前页面中所有使用相对路径的标签。

window.name的妙用

对当前窗口的window.name对象赋值,没有特殊字符的限制,因为window对象是浏览器窗口,而并非document对象,因此很多时候window对象不受同源策略的限制,攻击者利用这个对象可以实现跨域,跨页面传递数据。

Anehta的回旋镖

因为浏览器同源策略的原因,XSS也受到同源策略的限制-发生在A域的XSS很难影响到B域的用户,回旋镖的思路就是:如果B域上存在一个反射型XSS_B,A域上有一个存储型XSS_A,当用户访问A域上的XSS_A时,同时嵌入B域的XSS_B,即浏览A网页时,触发A脚本,脚本会跳转到B网站触发B脚本,然后再跳回来,虽然说时间可能很短,但是地址栏可以明显感知到变化。

XSS的防御

利用HttpOnly

浏览器将禁止页面的JavaScript访问带有HttpOnly属性的cookie,在setcookie的时候可以将cookie设置成HttpOnly,设置后JavaScript就无法获取该数据。XSS攻击自然无法奏效了。

输入检查

XSS Filter在用户提交数据㐊获取变量,并进行XSS检查;但此时用户数据没有结合渲染页面的HTML代码,可能对语境理解并不完整。

  1. 比如 <script src = " $var " ></script>,用户只需提交一个恶意脚本的地址就可实施XSS攻击,但是URL在此处本来就是合法用户数据,所以无法判断有没有问题。

  2. 如果输入 1+1<3 ,如果XSS FIlter不够智能有可能将 ‘<’过滤掉,这样改变了用户原本的意思。

  3. 输入的数据还可能展示在多个地方,每个地方的语境可能不同,使用单一替换操作,也有可能出现问题,比如用户输入 我是“天才”,Filter对其专用为$name = ' 我是\"天才\" ',在html代码中展示为:<div>我是 \"天才 \"</div>,在JavaScript中能正常展示。

输出检查

除了富文本的输出外,在变量输出到HTML界面时,可以使用编码或转义方式来防御XSS攻击。

针对HTML代码的编码方式是HtmlEncode,针对JavaScript的则是JavaScriptEncode(后面简称JE)。JE需要使用“\”对特殊字符进行转义,在对抗XSS时,还要求输出的变量必须在引号内部。

在正确的地方使用正确的编码方式,列子如下 onclick = "alert(' $var ');",如果用户输入如下:$var = htmlencode("');alert('2"),那么预期是解决了XSS注入,但是!对于浏览器来说,htmlparser会优先于JavaScript Parser执行,也就是alert之前,被HtmlEncode的字符会先被解码,也就是说之前的htmlencode根本没有起到任何的作用,最后执行alert时,里面的数据已经变成"alert('');alert('2')"了,因此第二次alert时就是XSS攻击。

正确的防御XSS

  1. 在HTML标签中输出和属性中输出,都可以使用HtmlEncode防御。在script和事件中输出首先应该确保输出的变量在引号中,防御方式用JE。

  2. 在CSS中输出应尽量禁止,一定有这样的需求可以使用OWASP ESAPI中的encodeForCSS函数。

  3. 在地址中输出,将变量部分进行URLEncode,如果用户能够输入完整的Url,则无法继续使用Urlencode,因为URL的Protocal和Host部分是不能够使用URLEncode的,但是输入完整Url就可能存在构造伪协议实施攻击的风险。如 <a href="javascript:alert(1);">,既然存在这种情况,那么解决方法就是先检查变量是不是‘http’开头,如果不是自动添加,这样可以防止伪协议的攻击。然后再对变量进行URLEncode。

防御DOM Based XSS

DOM based XSS是从javascript中输出数据到HTML界面里,而上述提到的方法都是针对从服务器应用直接输出到HTML界面的XSS漏洞。如下如果对变量进行JE后,又被输出到html页面。

<script>

var x = "JE($var)";

document.write("<a href='"+x+"'>test</a>");

</script>

这样还是会产生XSS攻击,原因在于document.write输出数据到HTML页面时,浏览器重新渲染了页面,在<script>标签执行时,已经对变量x进行了解码,其实JE只保证了第二行赋值语句不会产生XSS攻击,因此write的数据就是根本没进行处理的数据,同理如果使用HtmlEncode于如下代码

<script>

var x = "HtmlEncode($var)";

document.write("<a href='' onclick='alert(\""+x+"\")'>test</a>");

</script>

上述代码仍然会产生XSS攻击。

正确防御的方法是:将变量输出到<script>时,执行一次JE,然后document.write等操作将其输出到HTML界面时,如果输出到事件或者脚本,则再做一次JE,如果是输出到HTML内容或者属性,则再做一次HTMLEncode。

 

浏览器解码流程

  1. url解析

  2. 使用html解析器将标签构建成DOM解析树,此时里面的数据还没有进行html解码。

  3. DOM树构建成功后,会对节点内容进行解析转码。

  4. 运行css解析器。

  5. DOM节点已经构建完成后,处理到 <script>、<style>等标签时会触发javascript解析器,触发解析器的方式还有:伪协议中URL绑定、事件处理器(onclick、conerror、onload)、定时器、eval等,javascript解析器会将unicode类的数据进行解码。

如果遇到如下情况:

<script>

document.getElementById("1").innerHTML = "<img src=# on\u0065rror=alert(1)>";

</script>

相当于改变了DOM树,那么首先会触发javascript解析器,解码<img src = .....>部分,然后修改DOM树后,会重新对这一块走一遍步骤 2、3、4、5。也就是再进行html解码,然后onerror触发javascript解析器再进行javascript解码。

​浏览器解码过程​

​

跨站脚本攻击(XSS):原理、案例与全方位防御策略 通过深入理解XSS的攻击原理及其潜在影响,开发者和安全从业者可以采取有效的防御措施来保护Web应用程序的安全。多层次的综合防御策略,包括输入验证、输出编码、内容安全策略和HTTP头部安全配置,是防范XSS攻击的关键。攻击者利用XSS漏洞可以在用户浏览的网页中注入恶意脚本,从而盗取用户数据、劫持用户会话、修改网页内容等。基于DOM的XSS是指恶意脚本通过修改网页的DOM结构在客户端执行,而不经过服务器的处理。CSP是一种强大的防御机制,通过限制浏览器能够执行哪些脚本,防止XSS攻击。 阅读详情

相关推荐

WEB漏洞篇——跨站脚本攻击(XSS)

目录一、XSS简述1.1 什么是XSS1.2 XSS分类1.3 DOM XSS漏洞演示二、XSS攻击进阶2.1 初探XSS Payload2.2 强大的XSS Payload2.3 XSS攻击平台2.4 XSS Worm2.5 XSS构造技巧2.6 反射型XSS利用技巧-回旋镖2.7 Flash XSS2.8 JavaScript开放框架三、XSS防御3.1 HttpOnly3.2 输入检查3.3 输出检查3.4 正确地防御XSS3.5 处理富文本3.6 防御DOM Based XSS四、总结XSS攻击是指

m0_56634355的博客 5224

(跨脚本攻击)xss简介及三种类型

1.简介xss攻击,通常指黑客通过注入"HTML注入",来篡改网页,插入恶意的脚本,从而在用户浏览网页的时候,控制用户浏览器的一种攻击。那么什么是xss呢?看看下面的例子~~正常情况下,用户向test提交的数据会显示在页面中,例如:http://127.0.0.1/study/test.php?test=This%20is%20a%20test;http://此时查看页面源代码如图:但是如果提交一...

qq_36760683的博客 3737

最全--跨站脚本攻击(XSS)举例和预防方法

跨站脚本攻击(XSS)是指攻击者通过,从而窃取用户信息、篡改网页内容等。。

Keep trying, keep going 2051

【网络安全】跨站脚本攻击漏洞(了解)

介绍跨站脚本攻击漏洞

love_wgll的博客 885

Joern实战:从代码导入到Python分析的全流程避坑指南(附常见错误解决方案)

本文详细介绍了Joern静态分析工具从代码导入到Python分析的全流程实践指南,包括环境配置、代码导入技巧、数据库服务优化、Python交互分析及性能调优等关键步骤。特别针对常见错误提供了实用解决方案,帮助开发者高效进行代码安全分析和漏洞挖掘。

weixin_28309571的博客 141

OneNet平台MQTT连接避坑指南:C语言Token计算实战(附完整代码)

本文详细解析了OneNet平台MQTT连接中的Token计算机制,提供了C语言实现的完整代码和实战指南。通过HMAC算法和Base64编码,开发者可以高效生成安全凭证,避免常见连接问题,适用于物联网设备开发。

weixin_29193359的博客 462

网络安全——XSS跨站脚本攻击

XSS跨站脚本攻击,DVWA靶机的三种类型三个等级的操作

weixin_54055099的博客 4610

HWSD全球土壤数据下载处理

下载地址: http://www.fao.org/soils-portal/soil-survey/soil-maps-and-databases/harmonized-world-soil-database-v12/en/

江北20190411的博客 3万+

python网站安全(一): XSS注入

使用python详解了XSS注入的预防

stripe-python 1616

【嵌入式笔试题】C语言笔试题(4)

嵌入式C语言综合笔试题

m0_74055118的博客 1069

泛微ecology9 HRMwebservice接口实战:企业组织架构与人员信息同步指南

本文详细介绍了泛微ecology9 HRMwebservice接口在企业系统集成中的实战应用,重点解析了如何通过该接口实现组织架构与人员信息的双向同步。内容涵盖环境配置、核心接口调用、数据格式规范及常见错误排查,旨在帮助开发与运维工程师高效完成主数据同步,提升企业IT管理效率。

weixin_29323365的博客 498

Web安全 XSS漏洞的利用(Beef工具)(点击链接就被黑的技术.)

XSS漏洞的 概括: XSS又叫CSS(Cross Site Script)跨站脚本攻击,指的是攻击者在Web页面,插入恶意JS代码,当用户浏览该页之时,嵌入其中JS代码就会被执行,从而达到攻击的目的.(包含:收集用户的Cookie,添加账号,修改密码,提高用户权限等等.)

网络安全领域___专研者. 4974

【DEIM创新改进】独家下采样创新改进篇 | ECCV 2026 | DEIM 引入FSD-Down频域-空间动态下采样,在下采样过程中保留小目标的高频信息、助力小目标检测、遥感小目标检测有效涨点

🔥本文提出了一种名为FSD-Down的频域-空间动态下采样模块,用于改进DEIM网络模型在小目标检测中的性能。FSD-Down通过小波分解显式保留低频语义和高频细节,结合分组卷积、动态通道权重和可学习缩放因子,自适应强化目标边缘与纹理特征。该模块能有效减轻传统下采样造成的频率混叠和细节丢失,提升对小目标、密集目标和低对比度目标的检测能力。实验表明,FSD-Down计算开销可控,在保持实时性的同时显著提升检测精度,特别是在VisDrone和AITODv2数据集上对小目标的检测性能提升显著。

Ai缝合怪、助力小伙伴高效发论文 82

跨站脚本攻击(XSS)详解

跨站脚本攻击(XSS,Cross-Site Scripting)是一种通过在网页中注入恶意脚本,攻击用户浏览器的漏洞。攻击者可以利用XSS窃取用户敏感信息、劫持会话、或在受害者浏览器中执行恶意操作。通过及时识别和修复漏洞、使用安全编码实践和部署防御技术,可以有效预防XSS攻击的发生。

2402_86725606的博客 2050

29、智能问答系统:原理、挑战与实现

本文深入探讨了智能问答系统的原理、挑战与实现方法。从智能问答系统的定义、重要性、问题类型和构建步骤,到实现中的歧义问题、数据集创建及基于规则的系统实现,全面解析了这一自然语言处理领域的重要应用。同时,文章还介绍了智能问答系统的应用场景、发展趋势以及面临的挑战与应对策略,为读者提供了一个全面而深入的理解框架。

redis7keeper的博客 163

航天设备研制中的形态分类:电性件、正样件及其他关键形态详解

航天设备的研制是一个高度复杂且严谨的工程过程,涉及多个阶段的不同产品形态。这些形态各具特点,在研制流程中承担着不同的验证任务和工程目标。本文将系统介绍航天设备研制中的主要形态,包括**电性件(EM)**、**正样件(FM)**以及**结构热控件(STM)**、**鉴定件(QM)**和**初样件(PFM)**等,详细解析它们的定义、用途和工程意义,帮助读者全面理解航天产品从设计到飞行的全生命周期管理。

ScilogyHunter的博客 1661

跨站脚本攻击(XSS)全解析

跨站脚本攻击,简称 XSS,是一种允许攻击者在受害者的浏览器上执行恶意 JavaScript 代码的漏洞。XSS 是一种客户端注入漏洞,因此它不会直接影响服务器,而是以该 Web 应用程序的客户端(用户)为攻击目标。所以,XSS 的关键就在于“我从哪里来,要到哪里去”。“我从哪里来” → 注入点“我要到哪里去” → 反射点注入点:即你可以注入内容的输入字段。下面举个例子:在上面的图片中,你可以看到有两个注入点:1. 路径;2. 搜索框。一定要记住:路径也是一个潜在的注入点。

qq_41602693的博客 1344

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Python 处理跨站脚本攻击(XSS)的安全措施

XSS 攻击的核心在于将恶意脚本注入到网页中,并通过用户的浏览器执行。攻击者通常会利用用户输入的不安全处理方式,例如直接将未经处理的用户数据插入到 HTML 页面中。如果攻击成功,恶意脚本可能会窃取用户的 Cookie、会话信息,甚至劫持用户的账户。反射型 XSS:攻击者通过诱使用户点击带有恶意参数的链接来触发脚本执行。存储型 XSS:攻击者将恶意脚本存储到服务器数据库中,所有访问该内容的用户都会受到影响。DOM 型 XSS:攻击者通过篡改客户端的 DOM 结构,使得恶意脚本被执行。

2501_91163984的博客 1248

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

next cyber——跨站脚本攻击(XSS)

在留言板提交使用我们上面的有效载荷,修改JavaScript代码显示cookie而不是显示url,获取。

nidaye_sun的博客 1833

跨站脚本攻击(XSS)高级绕过技术与防御方案

摘要:本文深入分析XSS高级绕过技术,包括事件处理器过滤绕过(冷门HTML属性、跨命名空间攻击、CSS注入)、标签解析容错特性(非常规标签构造、编码混淆)以及现代技术演进(动态Payload、第三方依赖滥用、CSP绕过)。提出企业级防御方案:深度输入过滤(多层级清洗)、上下文感知输出编码(不同场景专用编码)、强化CSP策略(strict-dynamic)和运行时保护(DOM监控/函数Hook)。结合历史漏洞案例(GitHub/React/Angular)和红蓝对抗测试矩阵,推荐采用DOMPurify+CSP

Bruce_xiaowei的博客 1507

跨站脚本攻击(XSS)与跨站请求伪造(CSRF)的介绍、区别和预防

攻击者通过在网页中注入恶意脚本(如 JavaScript),当用户访问该页面时,脚本会在用户浏览器中执行,从而窃取数据、劫持会话或控制用户行为。“我偷你的数据”(脚本注入,用户受害)。2011 年索尼 PSN 被黑事件,用户数据泄露,其中就涉及 XSS 漏洞。这个案例展示了 XSS 如何被用来窃取用户会话,进而访问敏感信息。示例。

chengoodflower的博客 1338

跨站脚本攻击(XSS)原理及防护方案

保护用户数据和隐私,确保网络环境的安全,才是网站运营者义不容辞的责任。跨站脚本攻击(XSS,Cross-Site Scripting)是一种常见的网络安全漏洞,攻击者通过在网页中注入恶意脚本,使其在用户的浏览器中执行。XSS攻击可以窃取用户的敏感信息,如cookies、会话令牌等,甚至可以劫持用户会话,进行恶意操作。安全加速(Secure Content Delivery Network,SCDN)是德迅云安全推出的集分布式DDoS防护、CC防护、WAF防护、BOT行为分析为一体的安全加速解决方案。

dexunxiaoqian的博客 1175

跨站脚本攻击(XSS)以及如何防止它?

XSS攻击是指攻击者通过注入恶意脚本到网页,当其他用户浏览该页面时,恶意脚本会在受害者的浏览器中执行,从而获取敏感信息、篡改页面内容或执行其他恶意操作。防范XSS攻击是前端开发中不可忽视的一部分。通过理解XSS攻击的原理及其防御策略,我们可以构建出更加安全、健壮的Web应用。随着网络环境的不断演变,开发者应持续关注最新的安全动态,不断优化和升级自己的安全实践,以保护用户的信息安全。在日常开发中,我们应该秉持谨慎的态度,对每一行代码负责,共同营造一个更加安全的互联网世界。

一个做过前端开发的产品经理,经历过睿智产品的折磨导致脱发之后,励志要翻身"农奴"把歌唱,一边打入敌人内部一边持续提升自己,为我们广大开发同胞谋福祉,坚决抵制睿智产品折磨我们码农兄弟! 1314

跨站脚本攻击(XSS)如何防范?

跨站脚本攻击(XSS)是一种常见的网络安全漏洞,攻击者通过在网页中注入恶意脚本,从而在用户浏览网页时执行这些脚本,窃取用户的敏感信息或控制用户的浏览器。:对用户输入的数据进行严格的过滤和验证,确保输入的内容符合预期的格式和类型。例如,验证输入是否为有效的电子邮件地址或URL,过滤掉可能导致脚本执行的特殊字符。:在将用户输入的内容输出到网页时,进行适当的编码处理,防止恶意脚本被执行。例如,将HTML特殊字符进行转义,将转义为,将转义为。

破损的天堂鸟博客 1517
上一篇: 浏览器安全
下一篇: 跨站点请求伪造(CSRF)
jj_jameholl
博客等级 码龄10年 5粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值