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天前
      |
      前端开发 程序员
      【前端web入门第二天】01 html语法实现列表与表格_合并单元格
      本文介绍了HTML中的列表与表格的使用方法。列表包括无序列表(`&lt;ul&gt;`嵌套`&lt;li&gt;`)、有序列表(`&lt;ol&gt;`嵌套`&lt;li&gt;`)和定义列表(`&lt;dl&gt;`嵌套`&lt;dt&gt;`和`&lt;dd&gt;`)。
      32 19
      |
      2天前
      |
      前端开发 Windows
      【前端web入门第一天】02 HTML图片标签 超链接标签 音频标签 视频标签
      本文档详细介绍了HTML中的图片、超链接、音频和视频标签的使用方法。首先讲解了`&lt;img&gt;`标签的基本用法及其属性,包括如何使用相对路径和绝对路径。接着介绍了`&lt;a&gt;`标签,用于创建超链接,并展示了如何设置目标页面打开方式。最后,文档还涵盖了如何在网页中嵌入音频和视频文件,包括简化写法及常用属性。
      24 13
      |
      2天前
      |
      JavaScript 前端开发
      【前端web入门第一天】03 综合案例 个人简介与vue简介
      该网页采用“从上到下,先整体再局部”的制作思路,逐步分析并编写代码实现个人简介页面。内容涵盖尤雨溪的背景、学习经历及主要成就,同时介绍其开发的Vue.js框架特点。代码结构清晰,注重细节处理,如使用快捷键提高效率,预留超链接位置等,确保最终效果符合预期。
      |
      2天前
      |
      前端开发 程序员 C++
      【前端web入门第一天】01 开发环境、HTML基本语法文本标签
      本文档详细介绍了HTML文本标签的基础知识。首先指导如何准备开发环境,包括安装VSCode及常用插件;接着全面解析HTML的基本结构与标签语法,涵盖从基本骨架搭建到注释的使用,以及标题、段落、换行和平行线、文本格式化等标签的具体应用,适合初学者循序渐进地掌握HTML。
      |
      4天前
      |
      Web App开发 前端开发 JavaScript
      Web前端项目的跨平台桌面客户端打包方案之——CEF框架
      Chromium Embedded Framework (CEF) 是一个基于 Google Chromium 项目的开源 Web 浏览器控件,旨在为第三方应用提供嵌入式浏览器支持。CEF 隔离了底层 Chromium 和 Blink 的复杂性,提供了稳定的产品级 API。它支持 Windows、Linux 和 Mac 平台,不仅限于 C/C++ 接口,还支持多种语言。CEF 功能强大,性能优异,广泛应用于桌面端开发,如 QQ、微信、网易云音乐等。CEF 开源且采用 BSD 授权,商业友好,装机量已超 1 亿。此外,GitHub 项目 CefDetector 可帮助检测电脑中使用 CEF
      35 3
      |
      6天前
      |
      前端开发 JavaScript 开发者
      现代前端框架激烈交锋,高效响应式 Web 界面的归属扑朔迷离!
      【9月更文挑战第6天】本文通过实际案例,比较了主流前端框架 Vue.js、React 和 Angular 的特点与优势。Vue.js 以简洁的语法和灵活的组件化架构著称,适合小型到中型项目;React 强调性能和可扩展性,适用于大型应用;Angular 凭借全面的功能和严格架构,适合企业级开发。开发者应根据项目需求和技术栈选择合适的框架。
      24 0
      |
      2月前
      |
      存储 安全 JavaScript
      手摸手带你进行XSS攻击与防御
      当谈到网络安全和信息安全时,跨站脚本攻击(XSS)是一个不可忽视的威胁。现在大家使用邮箱进行用户认证比较多,如果黑客利用XSS攻陷了用户的邮箱,拿到了cookie那么就可以冒充你进行收发邮件,那真就太可怕了,通过邮箱验证进行其他各种网站的登录与高危操作。 那么今天,本文将带大家深入了解XSS攻击与对应的防御措施。
      |
      24天前
      |
      监控 安全 JavaScript
      对跨站脚本攻击(XSS)的防御策略?
      【8月更文挑战第15天】
      68 1
      |
      2月前
      |
      SQL 安全 数据库
      Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
      【7月更文挑战第26天】在 Python Web 开发中, 安全性至关重要。本文聚焦 SQL 注入、XSS 和 CSRF 这三大安全威胁,提供实战防御策略。SQL 注入可通过参数化查询和 ORM 框架来防范;XSS 则需 HTML 转义用户输入与实施 CSP;CSRF 防御依赖 CSRF 令牌和双重提交 Cookie。掌握这些技巧,能有效加固 Web 应用的安全防线。安全是持续的过程,需贯穿开发始终。
      63 1
      Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
      |
      29天前
      |
      存储 安全 JavaScript
      XSS攻击(Cross-Site Scripting)
      【8月更文挑战第11天】
      45 2