Day2:跨站脚本攻击

2023-11-01

「目标」: 持续输出!每日分享关于web前端常见知识、面试题、性能优化、新技术等方面的内容。篇幅不会过长,方便理解和记忆。

「主要面向群体:」前端开发工程师(初、中、高级)、应届、转行、培训等同学

Day2-今日话题

想必大家经常会在面试中或者工作生活中听到跨站脚本攻击(XSS)相关的问题或者话题,那么今天我将从以下三个方面聊聊跨站脚本攻击:

  1. 跨站脚本攻击是什么?
  2. 跨站脚本攻击有什么危害?
  3. 如何防御跨站脚本攻击?

跨站脚本攻击是什么?

跨站脚本攻击(Cross-Site Scripting,简称XSS)是一种网络安全漏洞,攻击者通过在受害者的浏览器中注入恶意脚本,从而在受害者浏览器中执行恶意代码。这种攻击将让攻击者窃取用户敏感信息、劫持用户会话、篡改网页内容以及执行其他恶意行为。XSS攻击通常在用户与一个被攻击的网站进行交互时发生,攻击者利用网站未充分过滤或验证用户输入的漏洞,将恶意脚本嵌入到网页中,然后让受害者浏览器执行这些脚本。

XSS攻击可以分为三种主要类型:

「存储型XSS(Stored XSS)」: 攻击者将恶意脚本存储在网站服务器上,当其他用户访问包含这些恶意脚本的页面时,恶意脚本从服务器加载并在受害者浏览器中执行。

「反射型XSS(Reflected XSS)」: 攻击者将恶意脚本作为参数注入到URL中,当用户点击包含恶意参数的链接时,服务器将参数的内容反射回浏览器并执行。

「DOM型XSS(DOM-based XSS)」: 攻击者通过修改页面的DOM结构来触发漏洞,这种类型的XSS攻击不会将恶意代码传递给服务器。

跨站脚本攻击有什么危害?

「窃取敏感信息」: 攻击者可以通过注入恶意脚本,窃取用户的敏感信息,如用户名、密码、Cookie等。这些信息可以用来冒充用户身份进行恶意操作。

「劫持会话」: 攻击者通过窃取用户的会话令牌或Cookie,能够劫持用户的会话,实施未经授权的操作,如修改账户信息、发表言论等。

「篡改网页内容」: 攻击者可以通过注入恶意脚本,修改网页上的内容,向用户展示虚假信息、欺骗性的广告、恶意链接等,影响用户的体验和信任。

「钓鱼攻击」: 攻击者可以伪造合法网站,诱使用户输入敏感信息,如银行账户密码、信用卡信息等,从而实施钓鱼攻击。

「恶意操作」: 攻击者可以在用户浏览器中执行恶意脚本,例如发起DDoS攻击、改变用户设置、执行未授权操作等,从而对用户和网站造成实际损害。

「信任破坏」: 如果用户发现网站存在XSS漏洞,可能会对该网站产生质疑并失去信任,导致用户流失。

「传播恶意代码」: 攻击者可以利用XSS漏洞传播恶意软件、病毒或恶意脚本,进一步扩大攻击范围。

「破坏隐私」: 用户的隐私可能会被泄露,从而导致个人、财务等方面的损失。

如何预防XSS

「输入验证和过滤」: 对于所有用户输入的数据,包括表单提交、URL参数等,进行严格的验证和过滤。确保只允许合法和预期的输入通过。可以使用白名单过滤、正则表达式匹配等方法来防止不安全的输入。

「输出转义」: 在将用户输入数据插入到HTML页面时,使用适当的输出转义机制,将特殊字符转换为它们的HTML实体形式。这样可以防止浏览器将输入内容解释为代码。

「使用安全的编码库」: 使用安全的编码库来处理用户输入和输出,这些库会自动执行必要的输入验证、过滤和输出转义,从而减少开发者的出错机会。

「Content Security Policy(CSP)」: CSP是一种安全策略,可以在HTTP头中设置,用于限制页面可以加载的资源和执行的脚本。通过设置合适的CSP规则,可以有效减少XSS攻击的风险。

「HttpOnly和Secure标记」: 在设置Cookie时,使用HttpOnly标记确保Cookie不能被JavaScript访问,使用Secure标记确保Cookie只在HTTPS连接中传输。

「使用框架和库」: 使用流行的Web开发框架和库(如React、Angular、Vue.js等),这些框架通常有内置的安全机制,可以减少XSS攻击的风险。

「教育用户」: 提高用户的网络安全意识,让他们了解XSS攻击的风险和如何避免受到攻击。

「定期安全审计」: 定期检查和审计代码,查找潜在的XSS漏洞,及时修复。

「最小化权限」: 在数据库和服务器上使用最小权限原则,限制应用程序和用户的访问权限,减少攻击者能够获取的敏感信息。

「避免内联脚本」: 尽量避免使用内联脚本,而是使用外部JavaScript文件。这样可以帮助隔离用户输入和执行的代码。

「使用HTTPOnly Cookie」: 使用HTTPOnly Cookie可以防止通过JavaScript访问Cookie,从而减少攻击者窃取会话令牌的可能性。

「安全开发实践」: 遵循安全的开发实践,编写安全的代码,不信任用户输入,使用最新的漏洞库和工具进行代码审查和漏洞扫描。

拓展

1. 存储型XSS

存储型XSS攻击是一种利用网站漏洞将恶意脚本存储在服务器上,然后在其他用户访问包含恶意脚本的页面时执行的攻击。攻击者通常通过网站上的表单提交、评论区、用户上传的内容等方式将恶意脚本注入到服务器上。

以下是一些存储型XSS攻击的示例,以及如何防御这些攻击:

  1. 评论区攻击:

攻击者在网站的评论区提交恶意评论,其中包含恶意脚本。当其他用户查看评论时,恶意脚本会被加载并在其浏览器中执行。

「防御方法:」 在显示用户提交的内容之前,对内容进行适当的转义,将特殊字符转换为HTML实体,从而防止恶意脚本的执行。

  1. 用户上传的文件攻击:

攻击者上传一个包含恶意脚本的文件(如图像、文档等),然后其他用户下载或查看这些文件时,恶意脚本会被执行。

「防御方法:」 对用户上传的文件进行严格的验证和过滤,确保只允许安全的文件类型和内容上传,并在文件展示时进行适当的转义。

  1. 个人资料/设置注入:

攻击者在用户个人资料或设置中注入恶意脚本,当其他用户查看该用户的资料或设置时,恶意脚本会被执行。

「防御方法:」 在展示用户个人资料或设置内容之前,对内容进行适当的验证、过滤和转义,确保不会执行恶意脚本。

  1. 商城订单注入:

攻击者在购物网站的订单备注或其他字段中注入恶意脚本,当其他用户查看订单详情时,恶意脚本会被执行。

「防御方法:」 对订单信息等敏感数据进行适当的过滤和转义,确保不会执行恶意脚本。

  1. 用户提交的动态内容:

如果网站允许用户提交动态内容,如动态状态、文章等,攻击者可以在这些内容中注入恶意脚本。

「防御方法:」 对用户提交的动态内容进行适当的验证、过滤和转义,确保恶意脚本无法执行。

2. 反射型XSS

反射型XSS攻击是一种将恶意脚本作为参数注入到URL中,然后通过诱使用户点击恶意链接,使恶意脚本在受害者浏览器中执行的攻击。攻击者通常会通过诱导用户点击链接或者访问特定的URL来触发这种攻击。

以下是一些反射型XSS攻击的示例,以及如何防御这些攻击:

  1. 搜索引擎欺骗攻击

攻击者创建一个包含恶意脚本的URL,然后通过社交媒体、电子邮件等途径将这个URL传递给受害者。当受害者点击链接时,恶意脚本会在URL参数中执行。

「示例URL:」

http://www.example.com/search?query=<script>alert('XSS Attack!');</script>

「防御方法:」 对于接收的URL参数,对内容进行适当的验证、过滤和输出转义,确保恶意脚本无法执行。另外,设置合适的CSP策略,限制页面可以执行的脚本来源。

  1. 社交媒体攻击:

攻击者在社交媒体上发布带有恶意脚本的链接,当用户点击这些链接时,恶意脚本会在受害者浏览器中执行。

「示例链接:」

http://www.example.com/page?message=<script>steal_user_info()</script>

「防御方法:」 在显示或处理来自用户的输入数据时,确保对内容进行适当的验证、过滤和输出转义,防止恶意脚本的执行。

  1. 恶意广告链接:

攻击者可以在恶意广告中插入包含恶意脚本的链接,当用户点击广告时,恶意脚本会被执行。

「防御方法:」 对于接收的广告内容,对内容进行适当的验证、过滤和输出转义,限制不受信任的内容的执行。

  1. 钓鱼攻击:

攻击者伪装成合法网站,并在URL参数中注入恶意脚本,诱使用户点击链接并执行恶意脚本。

「示例链接:」

http://www.example-legit-site.com?redirect=<script>steal_user_credentials()</script>

「防御方法:」 针对重定向或跳转的参数,对内容进行适当的验证、过滤和输出转义,确保不会触发恶意脚本的执行。

3.DOM型XSS

DOM型XSS(Document Object Model Cross-Site Scripting)是一种XSS攻击类型,攻击者通过操纵页面的DOM(文档对象模型)来实现攻击,而不是直接向服务器提交恶意脚本。这种攻击通常涉及使用JavaScript来修改页面的DOM结构,从而触发恶意代码的执行。DOM型XSS攻击不涉及向服务器发送恶意脚本,而是利用浏览器在解析和执行JavaScript时的行为。

以下是一些DOM型XSS攻击的示例,以及如何防御这些攻击:

  1. 参数注入攻击:

攻击者构造一个恶意URL,其中包含参数,该参数被JavaScript解析并用于修改页面的DOM结构,从而触发恶意代码的执行。

「示例URL:」

http://www.example.com/page#<script>malicious_code()</script>

「攻击方式:」 当用户访问带有上述URL的页面时,浏览器会解析URL中的参数,并将其插入到页面的DOM结构中。

「防御方法:」 不信任来自URL中的参数,确保在将参数插入到DOM之前对其进行适当的验证和转义。尽量避免使用JavaScript从URL中提取参数并操作DOM。

  1. 操作URL参数:

攻击者通过修改URL中的参数值来触发恶意代码的执行,从而影响页面的行为。

「示例URL:」

http://www.example.com/page?message=<script>malicious_code()</script>

「攻击方式:」 攻击者将恶意脚本注入到URL参数中,页面中的JavaScript解析该参数并执行恶意代码。

「防御方法:」 对于来自URL参数的输入数据,进行适当的验证、过滤和输出转义,确保恶意脚本无法执行。不要在页面的JavaScript中直接操作未经验证的URL参数。

  1. 用户操作引发攻击:

攻击者通过诱使用户进行特定的操作,触发恶意代码的执行。例如,攻击者可能要求用户在输入框中输入内容,然后将该内容插入到页面中。

「示例:」

<input type="text" id="inputField">
<button onclick="displayInput()">Submit</button>
<script>
function displayInput({
  var userInput = document.getElementById("inputField").value;
   document.getElementById("output").innerHTML = userInput; // 没有过滤用户输入
}
</script>

「攻击方式:」 用户输入包含恶意脚本,点击“Submit”按钮时,恶意脚本被执行。

「防御方法:」 在将用户输入插入到DOM之前,对其进行适当的验证、过滤和输出转义,确保不会执行恶意脚本。

本文由 mdnice 多平台发布

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Day2:跨站脚本攻击 的相关文章

  • web前端(HTML+CSS)试题总结

    一 填空题 1 网页的后缀名通常为 xxx html 或 xxx htm 的页面 2 请写出在网页中设定表格边框的厚度的属性 border 设定表格单元格之间宽度属性 cellspacing 设定表格资料与单元格线的距离属性 cellpad
  • docker_run_application

    docker三种方式运行application 1 一次性运行 docker run ubuntu 14 04 bin echo Hello world 登录到container ubuntu14 04 运行命令 bin echo Hell
  • 六、HSV颜色空间应用实例——颜色分割提取与替换

    教程汇总 python基础入门系列 通过之前的章节 四 OpenCV颜色空间 HSV颜色模型 我们已经初步认识了HSV颜色空间的特性与优势 现在就来看两个典型的应用实例 颜色分割提取 与 颜色替换 颜色分割 通过HSV颜色空间的操作我们可以
  • visual studio 2019 调试驱动

    搭建驱动开发环境 搭建环境需要两台机器 本地机器用来代码开发 一台虚拟机用来测试和安装驱动 搭建驱动开发环境参考 visual studio 添加调试机器 驱动工程的属性 gt Driver Installer gt Deployment

随机推荐

  • 第三篇.WDF驱动之Helloworld

    借助Microsoft提供的kmdf框架 来理解一下驱动的一般流程 驱动的开发流程 1 驱动程序入口函数 DriverEntry 驱动程序的入口函数 类似于 main函数 程序的标准入口函数是DriverEntry 与WDM不同 WDF的D
  • Vue2.0安装Element-ui

    1 在项目终端输入 npm i element ui S 如果想知道是否安装成功 2 随后在main js里引入element组件 加载 element 组件库 import ElementUI from element ui 加载 ele
  • Linux入门级命令

    目录 1 开启终端 2 Linux命令格式 3 扩展 Linux下的命令补全 4 切换用户 5 uname命令 6 ls命令 用法一 用法二 用法三 7 pwd命令 8 cd命令 9 clear命令 10 reboot命令 11 shutd
  • MySQL表字段设置默认值

    环境 MySQL 5 1 命令行工具 问题 MySQL表字段设置默认值 解决 SQL CREATE TABLE test i a int NOT NULL DEFAULT 1 ts b timestamp NOT NULL DEFAULT
  • chrome启动参数设置

    chrome禁止本地浏览时加载本地其他文件 可以采用添加启动参数的方式来支持 添加参数为 allow file access from files 或者 disable web security Google Chrome 浏览器默认安装路
  • KDD‘21华为数值型特征做embedding,An Embedding Learning Framework for Numerical Features in CTR Prediction

    本文是针对数值型特征做embedding的方法 背景 图1 常用的数值型embedding方法可以分为以下三类 No Embedding 这类方法不做embedding 而是直接用原始的数值作为特征 或者在数值上面做一些改进 例如youtu
  • React 核心概念(3)

    React 核心概念 3 1 事件处理 React 元素的事件处理和 DOM 元素的很相似 但是有一点语法上的不同 引自 事件处理 React 事件的命名采用小驼峰式 camelCase 而不是纯小写 使用 JSX 语法时你需要传入一个函数
  • 写网关介绍比较好的文章地址

    https www jianshu com p 5bc4c0f58bf3
  • 自带内网穿透的文件同步工具Syncthing介绍

    文章目录 特征简介 下载与安装 简单介绍 后记 特征简介 Syncthing是一个文件同步工具 可以实现异地电脑间的文件同步 Syncthing自带内网穿透功能 文件同步过程将以P2P方式进行 Syncthing支持Windows MacO
  • QT中QDockWidget使用详解

    Qt系列文章目录 文章目录 Qt系列文章目录 前言 一 具体操作 1 QDockWidget控件配置函数 2 代码 1 头文件 2 实现文件 效果 遇到的问题 前言 QDockWidget提供了dock widget的概念 也称为工具面板或
  • shell脚本基础5——常用命令写作技巧

    文章目录 一 grep命令 二 sed命令 2 1 选项参数 2 2 常用命令 三 AWK命令 3 1 常用参数 3 2 常用示例 四 find与xargs 五 date命令 六 对话框 6 1 消息框 6 2 yes no对话框 6 3
  • 信息安全风险评估---矩阵法计算风险

    矩阵法计算风险 假设 有以下信息系统中资产面临威胁利用脆弱性的情况 共有两项重要财产 资产A1和资产A2 资产A1面临一个主要威胁T1 资产A2面临两个主要威胁T2 T3 威胁T1可以利用资产A1存在的两个脆弱性 脆弱性V1和V2 威胁T2
  • 小程序DOM如何转为图片并将图片分享给朋友?

    方案一 h5中转页 1 利用web端插件html2canvas将dom转成图片 h5端 入参请参考文档 http www dtmao cc ios 65361 html html2canvas refdom useCORS true sca
  • 可穿戴设备未来市场巨大

    可穿戴设备将冲击智能手机的存在 不可否认 可穿戴设备未来的市场非常之大 甚至极有可能冲击智能手机的存在 从功能角度讲 可穿戴设备有机会一步步替代智能手机 现阶段来讲 许多可穿戴设备只能算是手机的附庸产品 通讯 社交等功能以手机为基础 可穿戴
  • STM32定时器(输入捕获)

    上一章讲了输出比较的内容 输出比较就是定时器自增 同时和CCR比较 按照自己设置的比较要求 输出REF高低电平 这一章我们讲下面结构图输出比较左边部分 也就是输入捕获 首先 介绍一下输入捕获 IC input capture 输入捕获 输入
  • Vuforia SDK分析

    Vuforia Architecture 高通组件 camera 单实例 在需要摄像头的时候会返回唯一的摄像头实例 Image Converter 单实例 像素级的图像转换器 在相机的 OpenGL ES rendering 格式和 tra
  • Android中保存当前按钮的状态 按back键返回之后再次进入没有改变

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 一 使用SharedPreferences类 把用户操作记录保存到里面 因为是按钮的状态 所以在点击事件里面保存用户的操作数据 获取用户
  • 哨向 Mika & Lelush 1

    Report On Sentinels Guides of Atypical Combinations 非典型性哨兵向导结合报告 1 你是我的灯塔
  • HTML5 地理定位 【来自百度应用分享平台】

    百度给的地图API接口相当完善 复制过来一下 以后备用 基本使用方法
  • Day2:跨站脚本攻击

    目标 持续输出 每日分享关于web前端常见知识 面试题 性能优化 新技术等方面的内容 篇幅不会过长 方便理解和记忆 主要面向群体 前端开发工程师 初 中 高级 应届 转行 培训等同学 Day2 今日话题 想必大家经常会在面试中或者工作生活中