首页 > 其他分享 >五分钟带你了解XSS攻击!

五分钟带你了解XSS攻击!

时间:2024-07-31 12:29:01浏览次数:10  
标签:XSS 浏览器 攻击 用户 恶意 五分钟 攻击者

XSS(跨站脚本攻击)

什么是XSS?

一、定义和概述

跨站脚本攻击(XSS) 是一种安全漏洞,它允许攻击者将恶意客户端代码注入网站。此代码由用户执行,让攻击者绕过访问控制并冒充用户。

如果 Web 应用程序没有采用足够的验证或编码,则这些攻击会成功。

用户的浏览器无法检测到恶意脚本是不可信的,因此允许其访问任何 Cookie、会话令牌或其他特定于站点的敏感信息,或者让恶意脚本重写 HTML 内容。

XSS通常发生在以下情况:

1) 数据通过不受信任的源(通常是 Web 请求)进入 Web 应用

2) 动态内容被发送给 Web 用户,而未经过恶意内容验证。

恶意内容通常包括 JavaScript,但有时还包括 HTML、Flash 或浏览器可以执行的任何其他代码。基于 XSS 的攻击种类几乎是无限的,但它们通常包括向攻击者传输 cookie 或其他会话信息等私人数据、将受害者重定向到攻击者控制的网页,或以易受攻击的站点为幌子在用户的计算机上执行其他恶意操作。

XSS攻击通常会通过url参数注入输入框注入

二、不同类型的XSS攻击(存储型、反射型、DOM型)

1. 存储型XSS攻击

对于储存型XSS 攻击,注入的脚本将永久存储在目标服务器上。常见于社交网站,例如论坛的评论部分。

比如我们有一个评论功能,这里有一个输入框,攻击者输入一段包含恶意脚本(如用于窃取用户信息)的内容,点击提交,如果网站未适当检查用户输入,此时服务器端就会将恶意代码存储到数据库,其他访客每次访问时,都会拉取到恶意代码并执行,从而使访客信息被窃取。

由于恶意脚本存储在服务器上,任何其他访问的用户都将执行此代码,所以存储型XSS的危害是严重且持久的。

2. 反射型XSS攻击

反射型 XSS 攻击是最基本的 XSS 类型。

当用户被诱骗点击恶意链接、提交特制表单或浏览恶意网站时,注入的代码会传输到易受攻击的网站。Web 服务器将注入的脚本反射回用户的浏览器,作为请求的一部分发送到服务器的数据的响应中。

浏览器执行代码是因为它假设响应来自用户已经与之交互的“受信任”服务器。

简单来说,受攻击的网站(浏览器信任的网站)就相当于“工具人”,攻击者“借刀杀人”,借助这个网站,将恶意脚本注入后,服务器以为是正常访问,没有进行额外的过滤,直接返回对应的结果。浏览器则把这些结果呈现在页面上,从而可能执行一些恶意操作。

3. 基于DOM的XSS攻击

反射和存储的 XSS 是服务器端的问题,而基于 DOM 的是浏览器端的问题。基于 DOM 的 XSS 发生在 DOM(文档对象模型)中,而不是作为 HTML 的一部分。页面本身不会更改,但由于对 DOM 环境的恶意修改,页面中包含的客户端代码以意外的方式运行。

这种攻击不是将恶意代码插入页面,而是允许加载合法页面,然后利用用户输入将 HTML 添加到页面,执行恶意脚本。

例如,攻击者可能会使受害者点击恶意链接(例如www.legitimatewebsite.com/contact#< script >malicious )。网站将收到对页面的合法请求,但不会收到恶意片段(因为浏览器不会在 # 字符之后向站点的服务器发送任何内容)。受害者会看到合法的网站,但受害者的浏览器也会执行恶意脚本。

由于这种攻击的工作方式,服务器端保护无法阻止它,因为恶意代码根本没有被发送到服务器。因此,要防止这种攻击,就需要确保 JavaScript 不会以不安全的方式解释 URI 片段(统一资源标识符 - URI 标识指定位置的资源,例如 URL)。

三、XSS攻击的危害

  • 窃取cookie
  • 劫持流量
  • 插入广告
  • 置入木马
  • 获取用户信息

四、前端如何防御XSS攻击

1. 输入验证

客户端验证:在前端进行输入验证,确保用户输入的数据符合预期的格式和长度。例如,使用正则表达式来验证电子邮件地址或电话号码。

避免依赖客户端验证:尽管客户端验证有助于提高用户体验,但不要仅依赖于此。服务端验证仍然是必要的,因为客户端验证容易被绕过。

2. 输出编码

  • HTML编码:对动态生成的HTML内容进行编码,以防止恶意代码被执行。
        function encodeHTML(str) {return str.replace(/&/g, '&')
                      .replace(/</g, '<')
                      .replace(/>/g, '>')
                      .replace(/"/g, '"')
                      .replace(/'/g, ''');
        }

        const userInput = '<script>alert("XSS")</script>';
        const safeHTML = encodeHTML(userInput);
        document.getElementById('output').innerHTML = safeHTML;
  • 属性编码:确保HTML属性中的内容被正确编码,防止属性值中包含恶意代码。
       function encodeAttribute(str) {return str.replace(/&/g, '&')
                     .replace(/"/g, '"')
                     .replace(/'/g, ''');
       }

       const userInput = '"><img src=x one rror=alert(1)>';
       const safeAttribute = encodeAttribute(userInput);
       const img = `<img src="${safeAttribute}">`;
       document.getElementById('output').innerHTML = img;

3. 使用安全的框架和库

React 、Angular、Vue等前端框架:这些框架内置了防止XSS攻击的机制。它们通过自动进行输出编码和模板引擎渲染,减少直接操作DOM的机会。

4. 使用内容安全策略(CSP)

配置 CSP:设置CSP头部,限制页面可以加载的资源类型和来源。

只需将 Content-Security-Policy HTTP 标头添加到网页和任何适当的指令即可

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none';">

5. 避免内联JavaScript

避免使用内联事件处理器:如onclickonload等,改用外部的JavaScript文件或在脚本块中添加事件监听器。

    // 不推荐
    <button onclick="alert('XSS')">Click me</button>

    // 推荐
    <button id="myButton">Click me</button>
    <script>
        document.getElementById('myButton').addEventListener('click', function() {alert('XSS');});
    </script>

相关参考:

developer.mozilla.org/en-US/docs/…

www.freecodecamp.org/news/cross-…

www.acunetix.com/blog/articl…

标签:XSS,浏览器,攻击,用户,恶意,五分钟,攻击者
From: https://blog.csdn.net/ORANGE_3iING/article/details/140819389

相关文章

  • 五分钟,用flask做一个简单的交互页面
    Python作为一个万能且简单的编程语言,其在各个领域都有着很好的表现。其中在Web领域,也有大名鼎鼎的Django和Flask,今天我们就通过Flask,用五分钟写一个简单的交互页面!基本功能1、安装Flask在命令行中输入pipinstallflask即可安装Flask。2、创建Flask应用在P......
  • PHP安全防护抵御网络钓鱼攻击
    本文由ChatMoney团队出品随着互联网的飞速发展,网络钓鱼攻击已成为网络安全领域的重要威胁之一。网络钓鱼攻击通过伪装成合法网站或企业,诱骗用户进入虚假网站并窃取用户的个人信息、密码等敏感信息。对于使用PHP框架开发的Web应用来说,加强安全防护、防止网络钓鱼攻击显得尤为重......
  • Jenkins如何使用CrumbIssuer防御CSRF攻击
    1、CSRF(跨站请求伪造)概述在讲解Jenkins的跨站请求伪造(CSRF)保护机制之前,让我们首先对CSRF这一安全威胁及其重要性进行简明扼要的概述。1.1  CSRF(跨站请求伪造)的原理CSRF(即跨站请求伪造)是指利用受害者尚未失效的身份认证信息、(cookie、会话等),诱骗其点击恶意链接或者访......
  • 【待做】防守方攻击特征及规则库建立研究
    防守方攻击特征及规则库建立研究https://mp.weixin.qq.com/s/Ciisu-chMtp8X_blmYVA9Q原创simeon的文章小兵搞安全2024年07月10日08:57北京很多安全设备都内置了很多安全防御规则,但这些规则都是加密的,对用户不可见,处于黑盒状态。特别是升级后,规则库是否有效对安全防护......
  • 五分钟学会 调整 Gradio 运行界面 WEB UI 的背景图 和 添加 Html 标签
    场景我在调整gradio运行界面的组件的CSS样式时,我又再想,能不能给这个运行界面添个背景图或者其他HTML元素上去呢?如果可以那就真的太棒了吧~问题如何给gradio运行界面添加其他HTML元素和背景图?解决✨通过Markdown()方法:添加HTML标签通过g......
  • 【AI+安全】入侵检测系统:实时监测与防范网络攻击
    ❀引言随着互联网的普及和信息技术的飞速发展,网络安全问题日益凸显。网络攻击、数据泄露和身份盗用等事件频频发生,给企业和个人带来了巨大的经济损失和声誉风险。为了应对这些威胁,入侵检测系统(IDS)作为一种重要的网络安全工具,受到了广泛的关注和应用。本文将深入探讨入侵检测系......
  • 如何解决XSS攻击
    跨站脚本攻击(Cross-SiteScripting,XSS)是一种常见的网络安全威胁,它允许攻击者将恶意脚本注入到看似可信的网站中。这些脚本可以窃取用户数据、破坏网站功能,甚至冒充用户执行操作。本文将详细介绍XSS攻击的不同类型及其防御策略,并提供具体的代码示例。XSS攻击概述XSS攻击......
  • DDoS 攻击下的教育网站防护策略
    随着互联网的普及,教育网站成为学生和教师获取信息、进行在线学习的重要平台。然而,这些网站也成为了网络攻击的目标,尤其是分布式拒绝服务(DDoS)攻击。本文将探讨DDoS攻击对教育网站的影响,并提出一系列有效的防护措施,包括技术手段和管理策略,以确保教育网站的稳定运行。DDoS攻击......
  • 【unity实战】完美的2D横版平台跳跃玩家控制器,使用InputSystem+有限状态机实现人物加
    最终效果文章目录最终效果前言素材目录结构动画配置检测脚本状态机玩家有限状态机玩家控制脚本定义人物不同状态待机移动跳跃下落状态落地状态墙壁滑行状态蹬墙跳状态蹬墙跳下落状态一段近战攻击状态二段近战攻击状态冲锋状态土狼时间状态攀爬开始状态攀爬进行状态功能......
  • Go Lang使用bcrypt对用户数据加密,避免字典攻击
    Go语言提供了一种较为安全的加密方式,使用GoLanggolang.org/x/crypto/bcrypt模块,通过该模块可以快速实现密码的存储处理,每次运行,计算的密码值都不同。因此使用GoLanggolang.org/x/crypto/bcrypt模块对密码进行处理,可以避免字典攻击。1.命令行下安装bcrypt包:gogetgolang......