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



      // 总结 //


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


      相关文章
      |
      缓存 前端开发 JavaScript
      Web应用性能优化策略
      Web应用性能优化策略
      359 105
      |
      JavaScript 安全 前端开发
      同源策略如何防止 XSS 攻击?
      【10月更文挑战第31天】同源策略通过对 DOM 访问、Cookie 访问、脚本执行环境和跨源网络请求等多方面的严格限制,构建了一道坚实的安全防线,有效地防止了 XSS 攻击,保护了用户在网络浏览过程中的数据安全和隐私。
      481 49
      |
      消息中间件 前端开发 JavaScript
      探索微前端架构:构建现代Web应用的新策略
      本文探讨了微前端架构的概念、优势及实施策略,旨在解决传统单体应用难以快速迭代和团队协作的问题。微前端允许不同团队独立开发、部署应用的各部分,提升灵活性与可维护性。文中还讨论了技术栈灵活性、独立部署、团队自治等优势,并提出了定义清晰接口、使用Web组件、状态管理和样式隔离等实施策略。
      |
      安全 Go PHP
      Web安全进阶:XSS与CSRF攻击防御策略深度解析
      【10月更文挑战第27天】本文深入解析了Web安全中的XSS和CSRF攻击防御策略。针对XSS,介绍了输入验证与净化、内容安全策略(CSP)和HTTP头部安全配置;针对CSRF,提出了使用CSRF令牌、验证HTTP请求头、限制同源策略和双重提交Cookie等方法,帮助开发者有效保护网站和用户数据安全。
      691 2
      |
      前端开发 开发者 UED
      移动优先:响应式设计在现代Web开发中的实践策略
      【10月更文挑战第29天】在现代Web开发中,响应式设计已成为不可或缺的实践策略,使网站能适应各种设备和屏幕尺寸。本文介绍了移动优先的设计理念,对比了移动优先与桌面优先的策略,探讨了流式布局与固定布局的区别,详细讲解了CSS媒体查询的使用方法,并强调了触摸和手势支持及性能优化的重要性。
      332 1
      |
      SQL 存储 安全
      什么是XSS攻击?什么是SQL注入攻击?什么是CSRF攻击?
      理解并防范XSS、SQL注入和CSRF攻击是Web应用安全的基础。通过采用严格的输入验证、使用安全编码实践以及实现适当的身份验证和授权机制,可以有效防止这些常见的Web攻击,保障应用程序和用户的数据安全。
      909 0
      |
      存储 安全 JavaScript
      手摸手带你进行XSS攻击与防御
      当谈到网络安全和信息安全时,跨站脚本攻击(XSS)是一个不可忽视的威胁。现在大家使用邮箱进行用户认证比较多,如果黑客利用XSS攻陷了用户的邮箱,拿到了cookie那么就可以冒充你进行收发邮件,那真就太可怕了,通过邮箱验证进行其他各种网站的登录与高危操作。 那么今天,本文将带大家深入了解XSS攻击与对应的防御措施。
      |
      安全 前端开发 Java
      Web安全进阶:XSS与CSRF攻击防御策略深度解析
      【10月更文挑战第26天】Web安全是现代软件开发的重要领域,本文深入探讨了XSS和CSRF两种常见攻击的原理及防御策略。针对XSS,介绍了输入验证与转义、使用CSP、WAF、HTTP-only Cookie和代码审查等方法。对于CSRF,提出了启用CSRF保护、设置CSRF Token、使用HTTPS、二次验证和用户教育等措施。通过这些策略,开发者可以构建更安全的Web应用。
      920 4
      |
      存储 安全 Go
      Web安全基础:防范XSS与CSRF攻击的方法
      【10月更文挑战第25天】Web安全是互联网应用开发中的重要环节。本文通过具体案例分析了跨站脚本攻击(XSS)和跨站请求伪造(CSRF)的原理及防范方法,包括服务器端数据过滤、使用Content Security Policy (CSP)、添加CSRF令牌等措施,帮助开发者构建更安全的Web应用。
      625 3
      |
      存储 JavaScript 前端开发
      Xss跨站脚本攻击(Cross Site Script)
      Xss跨站脚本攻击(Cross Site Script)