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

简介: 接上文。

//防御XSS攻击 //


(1)设置HttpOnly


我们都知道,攻击者一般进行XSS攻击,大部分的目的都是为了获取用户的cookie, 那么我们就可以设置一下 cookie 的 HttpOnly 。当给 cookie 设置了 HttpOnly 时,在前端,就无法通过 js 代码获取到 cookie 的值,即 document.cookie 将得到一个空值,说明此时的 cookie 是一个不可读不可写的状态, 攻击者也就无法获取到想要的用户 cookie 信息了。


那这里呢,我就对如何设置HttpOnly进行讲解了,因为一般都是后端设置的,想要了解的小伙伴可以自行搜索一下,也非常的简单。


还有一点要说一下, 设置HttpOnly 并不是防御住了XSS攻击, 只是说不会让攻击者得到用户 cookie 信息, 所以我们还需要进行别的防御操作。


(2)转义字符串


我们在了解完三种XSS攻击方式以后发现,XSS攻击大多都是由数据的输入和输出作为攻击点进行攻击, 所以我们就需要在这几个点,对数据进行一下过滤,即前端数据输入和输出、后端数据输入和输出。


那么如何对数据进行过滤呢?我们可以来封装一个函数:


    function escapeHTML(str) {    return String(str)            .replace(/&/g, '&amp;')            .replace(/</g, '&lt;')            .replace(/>/g, '&gt;')            .replace(/"/g, '&quto;')            .replace(/'/g, '&#x27;')            .replace(/`/g, '&#96;')            .replace(/\//g, '&#x2F;')}


    这里将几个攻击者常用的输入内容都进行了转移,这样就避免了浏览器解析成了脚本代码。


    • 防御DOM型跨站攻击


    还是拿上面DOM型跨站攻击里的例子来说, 因为 js 代码是获取了文本框里的内容,然后不经过转移就进行输入, 所以才被浏览器解析成了脚本代码。我们则需要将数据输出前进行过滤一下


      <!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 () {          //在输入数据前,用我们封装的escapeHTML函数过滤一下            document.write(escapeHTML(content.value))        }
          }</script></body></html>


      来看一下这时,输入一段脚本代码会发生什么


      b63e7187048db23458e00d4f5875f33a.jpg


      我们输入的文本内容经过过滤以后,并没有被浏览器解析成脚本代码,而是一串字符串的形式,这样就做到了DOM型跨站攻击的防御。


      • 防御反射型跨站攻击


      这种类型的攻击是用户先访问了服务器,然后服务器返回给客户端进行渲染的, 所以我们在将数据发送给服务器前,需要对发送的数据进行过滤,其实后端在接收这个数据前和发送数据给客户端前,也应该做一下过滤。原因呢,很简单,因为攻击者可以用伪造请求的方式,绕过前端的数据过滤,直接请求服务器,这里不懂的小伙伴也没事, 我们主要是将前端的防御,想知道更多的可以去搜索一下资料。


      这里给大家列举了,可能会被反射型跨站攻击的点, 在向这几个地方输入值的时候, 一定要进行数据的过滤


      c0e5bc965ffd430a010a7742d41d653c.png


      针对不同的值,我们要做不同的过滤处理,因为我的能力有限,所以我从网上找了一个图,以及一个成熟的转义这些数据的库给大家,感兴趣的可以去学习一下。


      48660585a99c7927df040f6ff95a8ad1.png


      js-xss库,可以用来过滤不同的数据,下面放上github地址:https://github.com/leizongmin/js-xss



      // 总结 //


      总结一下就是,不要相信任何来源的数据(包括用户输入的、服务器传过来的),无论拿到什么数据,输入输出前都必须先进行过滤转译!!!


      相关文章
      |
      2月前
      |
      缓存 前端开发 JavaScript
      利用代码分割优化前端性能:策略与实践
      在现代Web开发中,代码分割是提升页面加载性能的有效手段。本文介绍代码分割的概念、重要性及其实现策略,包括动态导入、路由分割等方法,并探讨在React、Vue、Angular等前端框架中的具体应用。
      |
      2月前
      |
      前端开发 JavaScript 安全
      前端性能调优:HTTP/2与HTTPS在Web加速中的应用
      【10月更文挑战第27天】本文介绍了HTTP/2和HTTPS在前端性能调优中的应用。通过多路复用、服务器推送和头部压缩等特性,HTTP/2显著提升了Web性能。同时,HTTPS确保了数据传输的安全性。文章提供了示例代码,展示了如何使用Node.js创建一个HTTP/2服务器。
      73 3
      |
      2月前
      |
      前端开发 安全 UED
      2024年前端性能优化新策略
      2024年前端性能优化策略涵盖代码分割与环境变量管理。代码分割通过动态导入和按需加载CSS减少初始加载时间;环境变量管理则确保敏感信息安全,简化多环境配置。结合最新工具和技术,可大幅提升Web应用性能与用户体验。
      |
      1月前
      |
      缓存 监控 前端开发
      探索前端性能优化:关键策略与代码实例
      本文深入探讨前端性能优化的关键策略,结合实际代码示例,帮助开发者提升网页加载速度和用户体验,涵盖资源压缩、懒加载、缓存机制等技术。
      |
      2月前
      |
      前端开发 项目管理
      Gitflow分支策略及其在前端工程化中的应用
      Gitflow 分支策略也并非适用于所有项目。对于一些小型或简单的前端项目,可能会显得过于复杂。在实际应用中,需要根据项目的具体情况和团队的需求进行适当调整和优化。
      |
      2月前
      |
      前端开发
      结合具体案例分析Gitflow分支策略在大型前端项目中的应用优势
      通过这个具体案例可以看出,Gitflow 分支策略在大型前端项目中能够提供有条不紊的开发环境,保障项目的稳定性和持续发展。
      |
      2月前
      |
      前端开发
      如何制定适合前端工程化的分支策略?
      如何制定适合前端工程化的分支策略?
      36 4
      |
      2月前
      |
      前端开发 测试技术
      前端工程化的分支策略要如何与项目的具体情况相结合?
      前端工程化的分支策略要紧密结合项目的实际情况,以实现高效的开发、稳定的版本控制和顺利的发布流程。
      34 1
      |
      2月前
      |
      消息中间件 前端开发 JavaScript
      探索微前端架构:构建现代Web应用的新策略
      本文探讨了微前端架构的概念、优势及实施策略,旨在解决传统单体应用难以快速迭代和团队协作的问题。微前端允许不同团队独立开发、部署应用的各部分,提升灵活性与可维护性。文中还讨论了技术栈灵活性、独立部署、团队自治等优势,并提出了定义清晰接口、使用Web组件、状态管理和样式隔离等实施策略。
      |
      2月前
      |
      Web App开发 缓存 监控
      前端性能优化实战:从代码到部署的全面策略
      前端性能优化实战:从代码到部署的全面策略
      39 1