问题

xss到底是怎么攻击的?

回答
XSS攻击:那些藏在网页里的“小把戏”

想象一下,你正在一个你信任的网站上浏览信息,突然间,屏幕上弹出一个熟悉的登录框,让你输入用户名和密码。你一愣,这个网站本来不需要登录就能看内容啊?更奇怪的是,你刚输入的用户名和密码,竟然被悄悄地发送到了一个陌生的服务器上!

你可能刚刚就遭遇了一次“跨站脚本攻击”,英文缩写就是XSS。这可不是什么“大规模杀伤性武器”,而是一种更加隐蔽、更让人防不胜防的“小把戏”。它利用的是网页本身的一些“漏洞”,把恶意代码偷偷塞进去,然后引诱你的浏览器去执行。

XSS到底是怎么“下药”的?

XSS攻击的核心,就是在网页中注入恶意脚本。这些脚本通常是用JavaScript编写的,因为JavaScript是网页最常用的动态语言,可以操作网页内容、发送请求、甚至修改浏览器的一些行为。

想象一下,一个网站允许用户提交评论,而这个网站在显示评论的时候,并没有对用户输入的文字进行“过滤”或者“消毒”。这时,一个坏家伙就可以在评论里写下这样的内容:

``

当其他用户浏览这条评论时,他们的浏览器就会把这段 ``
2. 攻击者诱骗受害者点击这个URL。
3. 当用户点击URL时,浏览器会将这个URL发送给服务器。
4. 服务器在处理这个URL时,如果没有正确地过滤或转义URL中的恶意脚本,就会将这个脚本“反射”回用户的浏览器,并在返回的HTML页面中包含它。
5. 用户的浏览器收到包含恶意脚本的页面后,就会执行这段脚本。

后果:这种攻击的范围相对较小,只针对点击了恶意链接的用户。但同样可以用来窃取Cookie、执行其他恶意操作。它的特点是“即点即中毒”。

3. DOM型XSS (DOMbased XSS):

这是前面两种XSS的“变种”或者说“进阶版”,它的攻击点在于浏览器自身的DOM(文档对象模型)操作。简单来说,就是JavaScript代码在处理来自用户输入或者URL参数的数据时,没有进行充分的验证,导致恶意脚本被注入到DOM树中并执行。

攻击过程:
1. 网站的一些JavaScript代码会读取URL中的片段(比如``后面的内容)或者从其他地方获取数据。
2. 攻击者构造一个URL,在URL的片段或者其他数据中包含恶意JavaScript代码。例如:`http://www.example.com/page`
3. 当用户访问这个URL时,浏览器会加载网页,并且网页中的JavaScript代码会读取URL的片段。
4. 如果这个JavaScript代码没有对读取到的片段进行安全处理,就直接将其插入到页面的DOM中,或者使用`innerHTML`、`document.write`等方法渲染,那么其中的恶意脚本就会被执行。

后果:这种攻击可能看起来没有那么直接,但同样能够执行各种恶意操作,因为它是直接在用户的浏览器端执行的,绕过了服务器端的过滤。

XSS攻击的“招数”有哪些?

除了上面提到的攻击类型,攻击者还可能使用各种不同的JavaScript代码来达到目的:

窃取Cookie:最常见的手段是使用 `document.cookie` 来获取用户的Cookie信息,然后将这些信息发送给攻击者的服务器。一旦攻击者拿到了用户的登录Cookie,就可以冒充用户登录网站。
键盘记录:通过监听用户的键盘输入,将用户输入的账号密码、聊天内容等敏感信息记录下来。
钓鱼攻击:在网页中插入一个假的登录框,欺骗用户输入账号密码。
页面篡改:修改网页的内容,比如将产品价格显示成0,或者显示虚假信息。
重定向攻击:将用户强制跳转到钓鱼网站或者恶意网站。
跨站请求伪造 (CSRF):虽然CSRF是另一种安全漏洞,但XSS可以被用来辅助CSRF攻击,例如在用户不知情的情况下,让用户的浏览器执行一个代表用户进行操作的请求。

如何防御这些“小把戏”?

网站开发者和用户都有责任来防御XSS攻击:

对用户输入进行严格过滤和转义:这是最关键的防御手段。网站在接收用户输入时,应该对任何可能被解释为代码的字符(如`<`, `>`, `'`, `"`, `/`等)进行转义,或者直接移除。例如,将`

网友意见

user avatar

前言

XSS,是跨站脚本(Cross-site scripting)的简称,这是一种网站应用程序的安全漏洞攻击,代码注入的一种,其允许恶意用户将代码注入到网页上,之后其他用户在观看网页时就会受到影响,这类攻击通常包含了HTML以及用户端脚本语言如JavaScript等。

看完第一段,很多人首先会产生第一个疑问:Cross-site scripting为什么没有简称为CSS呢?

原因在于,按照先来后到的顺序,跨站脚本攻击缩写为CSS,则会与层叠样式表(Cascading Style Sheet)冲突,因此在安全领域则化名为XSS。

XSS攻击,通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java,VBScript,ActiveX,Flash或者甚至是普通的HTML。

攻击成功后,攻击者可能得到更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。因为在一开始时,这类攻击的演示案例是跨域的,所以被叫做了跨站脚本。就现在而言,是否跨域已经不再重要。

分类

这段主要解答一下提问的内容,即XSS攻击有那种类型, 不同类型的XSS到底是怎么进行攻击的?

XSS攻击可以分为两类:反射型和存储型,在《白帽子讲web安全》一书中则将DOM based XSS单独划分出来。前两类的划分依据是“数据存储在服务器与否”,而第三类属于历史原因被单列出来,实际可以看作是反射型。

XSS的本质,在于一部分有心人的恶意代码被当做了正常数据处理,进而导致了一系列安全事件,注入恶意代码,是XSS攻击的特征。

反射性

反射型XSS是非持久化的,需要欺骗用户自己去点击带有特定参数的XSS代码链接才能触发,一般是欺骗用户点击特定链接来进行恶意攻击,攻击代码就在url当中。

例如,将正常的网页url:

       http://www.dvwa.com/vulnerabilities/xss_r/?name=index     

改成下面这般便,可以实现恶意弹窗了:

       http://www.dvwa.com/vulnerabilities/xss_r/?name=<script>alert(Serendipity)</script>     

如果payload改成下面这个:

       http://www.dvwa.com/vulnerabilities/xss_r/?name=<script>alert(document.cookie)</script>     

便能实现获取当前用户的cookie,这种攻击结合csrf(跨站请求伪造),例如通过 XMLHttpRequest与CORS功能将数据发送给攻击方服务器,之后便可以在千里之外模拟用户登录,进而进行恶意操作。

这类攻击也有很多防御手段,其中一种便是利用str_replace将<script>删除,但上有政策下有对策,这类方法可以使用使用双写绕过:

       http://www.dvwa.com/vulnerabilities/xss_r/?name=<scr<script>ipt>alert(document.cookie)</script>     

写到这里,忽然想到了一个很有趣的故事,之前 @lokinko 对我说:为了防止抄袭,自己会将网名lokinko随机插入到文章中,我当时随口说了句,建议将标识符改为loklokinkoinko,就是用的这个梗,也不知道他有没有get到呢?

更高级别的代码可能会使用preg_replace函数来过滤删除所有关于<script>标签,但使用<IMG src=1 onerror=alert(document.cookie)>也可以得到同样的结果。

攻击和防御都在不断地升级进化,我这里就简单写点,不再长篇大论了。

存储型

存储型XSS攻击,是指将恶意代码被当做正常数据插入到服务器上的数据库中,当用户正常访问页面的时候,恶意代码从数据库中提取出来并被触发。

这类方法和反射型最大的区别在于其攻击载荷的存储位置不同,反射型XSS的攻击载荷并不存储在服务器上,攻击时需要将链接发送给特定用户,存储型XSS的攻击载荷直接保存在了服务器上,因此很多时候是无差别攻击。

例如一个留言板被黑客利用进行XSS攻击,提交了形如<script>alert(“please follow serendipity!”)</script>的代码,那么所有访问这个留言板的用户都将可能执行这段恶意脚本。

利用存储型XSS可实现劫持访问,盗取访问者cookie或者配合csrf攻击完成恶意请求等攻击。

DOM based XSS

DOM based XSS通过恶意脚本修改页面的DOM节点来发起攻击,是发生在前端的攻击。DOM型XSS的特殊之处在于,用户的输入经过了DOM操作,特别是在innerHTML、ajax中经常出现。

一般的攻击流程大致如下:

  • 攻击者构造出特殊的URL,其中包含恶意代码,例如<script>alert(document.cookie)</script>
  • 用户打开带有恶意代码的URL
  • 用户浏览器接受到响应后执行解析,前端JavaScript取出URL中的恶意代码并执行
  • 恶意代码窃取用户数据并发送到攻击者的网站,冒充用户行为,调用目标网站接口执行攻击者指定的操作。

可以看到,其和反射型XSS的介绍,很是相似。

小感想

XSS的有趣之处,在于其过多的绕过方式,例如介绍给lokin妹妹的双写绕过等。其次,类似于知乎这类夹杂着图片、文字、视频,甚至可能有自定义的样式和html提交的富文本,此类XSS非常难以防御,并不是一个过滤就可以解决的问题。

另外,也要考虑到实际业务场景的问题,别影响了知乎er的体验(并没有)。

现在,前后端的分离,安全框架的使用,使得大量的XSS攻击消声觅迹,但是老业务里仍然还是少不了这类不安全内容的,不信,看看铁路系统的flash吧(ε=ε=ε=┏(゜ロ゜;)┛


类似的话题

  • 回答
    XSS攻击:那些藏在网页里的“小把戏”想象一下,你正在一个你信任的网站上浏览信息,突然间,屏幕上弹出一个熟悉的登录框,让你输入用户名和密码。你一愣,这个网站本来不需要登录就能看内容啊?更奇怪的是,你刚输入的用户名和密码,竟然被悄悄地发送到了一个陌生的服务器上!你可能刚刚就遭遇了一次“跨站脚本攻击”,.............
  • 回答
    理解了,我们来聊聊如何在 PHP 中绕过 `htmlspecialchars()` 函数的防护,以达到 XSS 攻击的目的。绕过这种常见的防护措施,关键在于找到 `htmlspecialchars()` 无法转义的字符,或者利用其转义逻辑的盲点。首先,我们需要明确 `htmlspecialchars.............
  • 回答
    哎呀,说到这个,我可太有发言权了!当初微软发布XSS(Xbox Series S)的时候,我跟不少玩家一样,心里是挺纠结的。毕竟,XSS定位是“次世代入门款”,价格在那儿摆着,但当听到《光环:无限》在XSS上的表现,尤其是解析度和帧数方面,居然不如XOX(Xbox One X)——这感觉就有点复杂了.............
  • 回答
    好的,我们来聊聊这三种大家可能有点混淆的 XSS 攻击方式:DOMbased XSS、存储型 XSS 和反射型 XSS。虽然它们都属于跨站脚本攻击(CrossSite Scripting,简称 XSS),但它们在攻击原理、发生位置以及恶意脚本的“落脚点”上,有着显著的区别。咱们就一点一点地剖析,争取.............
  • 回答
    PS5 与 XSX/XSS:当前主机市场的热度大比拼自问世以来,PlayStation 5 (PS5) 和 Xbox Series X/S (XSX/XSS) 便一直是游戏界关注的焦点,它们代表了新一代游戏主机的发展方向。时至今日,尽管这两款主机都已在市场征战一段时间,但关于它们谁更受欢迎、谁更能吸.............
  • 回答
    日本市场对于微软 Xbox 来说,绝对是一场值得深挖的“逆袭”故事。如果说以前 Xbox 在日本总给人一种“水土不服”的感觉,那么近期的增长势头,特别是廉价款 Xbox Series S(简称 XSS)的亮眼表现,无疑为这个品牌注入了一剂强心针。但光看增长最快、XSS 受欢迎这两点,还远远不够。要想.............
  • 回答
    采用避免使用 `eval` 和 `new Function` 的策略,确实能够显著降低 JavaScript 引起的跨站脚本(XSS)攻击风险。这背后的原因可以从这两个函数的本质以及它们如何被恶意利用来理解。首先,让我们深入了解一下 `eval` 和 `new Function` 的本质。本质上,它.............

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou

© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有