小宋爱睡觉 小宋爱睡觉
首页
  • HTML
  • CSS
  • JavaScript
  • Vue
  • React
  • 计算机网络
  • 浏览器原理
  • 性能优化
  • 设计模式
手写系列
  • 字符串
  • 数组
  • 链表
  • 树
  • 动态规划
  • 排序算法
  • GitHub (opens new window)
  • JueJin (opens new window)
首页
  • HTML
  • CSS
  • JavaScript
  • Vue
  • React
  • 计算机网络
  • 浏览器原理
  • 性能优化
  • 设计模式
手写系列
  • 字符串
  • 数组
  • 链表
  • 树
  • 动态规划
  • 排序算法
  • GitHub (opens new window)
  • JueJin (opens new window)
  • 网络攻击与防范
    • 介绍一下什么是xss
    • 如何防范xss攻击
    • 介绍一下什么是CSRF
    • 如何防范csrf攻击
    • 介绍一下什么是中间人攻击
    • 介绍一下sql注入
    • 如何防止 SQL 注入
    • 介绍一下DDoS 攻击
    • 介绍一下上传文件攻击
    • 如何防止上传文件攻击
    • 介绍一下有哪些可能造成前端安全问题
    • 网络劫持有哪几种,如何防范
  • 进程和线程
  • 浏览器缓存
  • 浏览器的存储
  • 浏览器的渲染原理
  • 浏览器的同源策略
  • 浏览器的事件循环
  • 浏览器的垃圾回收机制
  • 浏览器组成
  • 浏览器原理
Crucials
2021-12-13

网络攻击与防范

# 介绍一下什么是xss 特别重要

概念:

xss是跨站脚本攻击,是一种代码注入攻击,攻击者通过,攻击者通过网站注入恶意脚本,使之在用户的浏览器上运行,进而盗取用户的信息如cookies等

本质:

网站对恶意代码进行过滤,与正常的代码混合在一起,浏览器无法分辨哪些是可信的,导致恶意代码执行

方式:

  • 获取页面的数据,如DOM cookies localstorge

  • dos攻击 发送合理请求 占用服务器资源,使得服务器无法访问服务器

  • 破坏页面结构

  • 流量劫持(将链接指向某网络)

攻击类型

xss可分为存储型 反射型 DOM型

  • 存储型指恶意脚本会存储到目标服务器上,当浏览器请求数据,脚本从服务器传回并执行

  • 反射型指的是攻击者诱导用户访问一个带有恶意的代码的URL后,服务端接收数据后处理,把带有恶意代码发送到浏览器端,浏览器端解析这段xss代码的数据当做脚本执行,最终完成xss攻击

  • dom型指的是修改页面的dom节点形成的xss

存储xss攻击步骤

  • 攻击者将恶意代码提交到目标网站的数据库

  • 用户打开目标网站,网站服务端从数据库中取出,拼接在html中返回给浏览器

  • 用户浏览器接收到响应后解析执行,混在其中的恶意代码被执行

  • 恶意代码窃取用户数据并发送到攻击者网站,或者冒充用户的行为,调用目标网站接口执行攻击者指定操作

多用于带有用户保存数据的网站功能,如论坛发帖 商品评论 用户私信

反射性xss攻击步骤

  • 攻击者构造出特殊URL,包含恶意代码

  • 用户打开这个URL,网站服务端将恶意代码从URL中取出,拼接在HTML中返回给浏览器

  • 用户浏览器接收到响应后解析执行,恶意代码也被执行

  • 恶意代码窃取用户数据并发送到攻击者网站,或冒充用户

反射型漏洞常见于通过URL传递参数,如网站的搜索,跳转等,由于用户需要主动打开恶意的URL才能生效,攻击者会结合多种手段诱导点击(例如诱导用户点击电子邮件的链接)

反射型和存储型主要区别是:反射型恶意代码存储在URL中,存储型恶意代码存储在数据库中

dom型xss攻击步骤

  • 构造特殊的URL,包含恶意代码

  • 用户打开这个URL

  • 用户浏览器接收到响应后解析执行,前端js取出URL中的恶意代码并执行

  • 恶意代码窃取用户数据并发送到攻击者网站,或冒充用户

dom和反射型的区别是反射型是他点击了一个链接然后他在服务端拦截然后操作你的信息或让你跳转到某个页面去,而dom型就是控制你的dom,当你点击之后他会弹出信息或者操作你的信息或者在页面中嵌入插入一个链接,其地址为用户输入的内容

# 如何防范xss攻击特别重要

  • 不使用服务端渲染,或者严格定义Content-Type: application/json,对插入到html中的代码充分转义

  • 使用csp,意思就是建立一个白名单,告诉浏览器哪些外部资源是可以加载执行的,防止恶意代码的注入

    • CSP指的是内容安全策略,它的本质是建立一个白名单,告诉浏览器哪些外部资源可以加载和执行。我们只需要配置规则,如何拦截由浏览器自己来实现。通常有两种方式来开启 CSP,一种是设置 HTTP首部中的 Content-Security-Policy,一种是设置 meta 标签的方式

    • <meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">
      // 脚本:只信任当前域名
      // <object>标签:不信任任何URL,即不加载任何资源
      // 样式表:只信任cdn.example.org和third-party.org
      // 框架(frame):必须使用HTTPS协议加载
      // 其他资源:没有限制
      
      1
      2
      3
      4
      5
      6
  • 对一些敏感信息进行保护,比如cookies使用http-only,使得脚本无法获得,也可以使用验证码,避免脚本伪装成用户进行操作

  • 如果服务端被黑了,返回一串恶意执行的代码,可以将执行的代码转发到服务端进行校验JSONP内容校验,再返回校验结果

# 介绍一下什么是CSRF 特别重要

概念:

指的是跨站请求伪造攻击,攻击者诱导用户进入第三方网站,然后该网站向被攻击网站发送跨站请求,如果用户在被攻击的网站保存了登录状态,那么攻击者就可以利用这个登录状态来冒充用户向原有网站发出请求了

本质:

利用cookies会在同源请求中携带发送给服务器的特点来实现用户的冒充

攻击类型:

get类型的csrf攻击:在网站的img标签构建一个请求,当用户打开这个网站就自动发起请求

post类型的:构建一个表单,隐藏他,当用户进入页面的时候自动提交这个表单

链接类型的csrf:在a标签里面构建一个请求,诱导用户去点击

# 如何防范csrf攻击特别重要

  • 进行同源检测,服务器根据 http 请求头中 origin 或者 referer 信息来判断请求是否为允许访问的站点,从而对请求进行过滤。当 origin 或者 referer 信息都不存在的时候,直接阻止请求。这种方式的缺点是有些情况下 referer 可以被伪造,同时还会把搜索引擎的链接也给屏蔽了。所以一般网站会允许搜索引擎的页面请求,但是相应的页面请求这种请求方式也可能被攻击者给利用。(Referer 字段会告诉服务器该网页是从哪个页面链接过来的)

为什么会出现referer和origin两个类似的请求头呢

referer显示来源页面的完整地址,而origin显示来源页面的origin: protocal+host,不包含路径等信息,也就不会包含含有用户信息的敏感内容

  • 使用 CSRF Token 进行验证,服务器向用户返回一个随机数Token ,当网站再次发起请求时,在请求参数中加入服务器端返回的 token ,然后服务器对这个 token 进行验证。这种方法解决了使用 cookie 单一验证方式时,可能会被冒用的问题,但是这种方法存在一个缺点就是,我们需要给网站中的所有请求都添加上这个 token,操作比较繁琐。还有一个问题是一般不会只有一台网站服务器,如果请求经过负载平衡转移到了其他的服务器,但是这个服务器的 session 中没有保留这个 token 的话,就没有办法验证了。这种情况可以通过改变 token 的构建方式来解决。

  • 对 Cookie 进行双重验证,服务器在用户访问网站页面时,向请求域名注入一个Cookie,内容为随机字符串,然后当用户再次向服务器发送请求的时候,从 cookie 中取出这个字符串,添加到 URL 参数中,然后服务器通过对 cookie 中的数据和参数中的数据进行比较,来进行验证。使用这种方式是利用了攻击者只能利用 cookie,但是不能访问获取 cookie 的特点。并且这种方法比 CSRF Token 的方法更加方便,并且不涉及到分布式访问的问题。这种方法的缺点是如果网站存在 XSS 漏洞的,那么这种方式会失效。同时这种方式不能做到子域名的隔离。

  • 在设置 cookie 属性的时候设置 Samesite ,限制 cookie 不能作为被第三方使用,从而可以避免被攻击者利用。

samesite的几种形式

strict lax None
完全禁止第三方cookies 大多数情况下不发送cookies,像img的src post请求等都不发送cookies 发送cookies
链接<a href="..."></a> 当且仅当开启secure模式
get表单<form method="GET" action="...">
预加载<link rel="prerender" href="..."/>

# 介绍一下什么是中间人攻击特别重要

概念

中间人攻击是指攻击者在通讯两端分别创立的联系,并交换其收到的数据,是通讯两端认为他们正在一个私密的连接与对方直接对话,但是事实上整个会话都被攻击者完全控制,在中间人攻击中,攻击者可以拦截通讯对方的内容进行篡改或插入新内容

攻击过程:

  • 客户端发请求到服务端,请求被中间人截获
  • 服务器向客户端发送公钥
  • 中间人获取公钥,保留在自己手中,给客户端发送中间人自己伪造的公钥
  • 客户端收到伪造的公钥,生成加密hash发给服务器
  • 中间人截获加密hash,用自己的私钥解密获得真正的密钥,同时生成假的加密hash发送给服务器
  • 服务器用私钥解密获得假密钥,然后加密数据传输给客户端

# 介绍一下sql注入重要

SQL注入是一种非常常见的数据库攻击手段,也是网络世界中最普遍的漏洞之一,它其实就是黑客在表单中填写包含 SQL 关键字的数据,表单数据提交给服务器时让数据库执行恶意 SQL 的过程。

例如 ' OR '1'='1 ,当我们输如用户名 admin ,然后密码输如 ' OR '1'=1='1 的时候,我们在查询用户名和密码是否正确的时候

本来要执行的是 SELECT * FROM user WHERE username='' and password=''

经过参数拼接后,会执行 SQL语句 SELECT * FROM user WHERE username='' and password='' OR '1'='1' ,这个时候1=1是成立,自然就跳过验证了。

# 如何防止 SQL 注入重要

主要是后端进行对 SQL 注入攻击的防护,常见的防护机制有:

  • 使用 preparestatement 预编译机制: 在sql语句执行前,对其进行语法分析、编译和优化,其中参数位置使用占位符 ? 代替了。当真正运行时,传过来的参数会被看作是一个纯文本,不会重新编译,不会被当做sql指令
  • 特殊字符转义: 些特殊字符,比如:%作为like语句中的参数时,要对其进行转义处理
  • 使用代码检测工具: 使用sqlMap等代码检测工具,它能检测sql注入漏洞
  • 数据库账号增加权限控制、数据库异常监控等等

# 介绍一下DDoS 攻击重要

Dos 拒绝服务攻击(Denial of Service attack)

是一种能够让服务器呈现静止状态的攻击方式。其原理就是发送大量的合法请求到服务器,服务器无法分辨这些请求是正常请求还是攻击请求,所以会照单全收。海量的请求造成服务器进入停止工作或拒绝服务的状态。

DDoS:分布式拒绝服务攻击(Distributed Denial of Service),DDos攻击是在 DOS 攻击基础上的,可以通俗理解,dos 是单挑,而 ddos 是群殴,因为现代技术的发展,dos攻击的杀伤力降低,所以出现了DDOS,攻击者借助公共网络,将大数量的计算机设备联合起来,向一个或多个目标进行攻击

# 介绍一下上传文件攻击

如果 web 网站没有对文件类型进行严格的校验,导致可执行文件被恶意上传到了服务器,恶意脚本就会执行

# 如何防止上传文件攻击

  • 文件上传后放到独立的存储上,做静态文件处理,杜绝脚本执行的可能
  • 对上传文件类型进行白名单校验
  • 使用随机数改写文件名和文件路径等等

# 介绍一下有哪些可能造成前端安全问题

  • 跨站攻击脚本

  • iframe的滥用:iframe中的内容是由第三方提供的,默认不受控制,可以在iframe上运行js脚本,flash脚本弹出对话框等破坏前端用户体验

  • csrf

  • 恶意第三方库

# 网络劫持有哪几种,如何防范重要

  • DNS劫持:输入jd.com强制跳转到taobao.com属于dns劫持

    • dns强制解析:通过修改运营商的本地dns记录,来引导用户流量到缓存服务器
    • 302跳转:通过监控网络出口的流量,分析判断哪些内容是可以进行劫持处理的,再对劫持的内存发起302跳转的回复,引导用户获得内容
  • HTTP劫持:访问google.com一直有贪玩蓝月广告,由于http明文传输,运营商会修改你的http响应内容

dns劫持由于涉嫌违法,已经被监管起来,现在很少有dns劫持,而http劫持依然非常盛行,最有效的方法还是使用https,使得运营商无法获取明文,就无法劫持你的响应内容

上次更新: 2022/03/14, 11:48:12
进程和线程

进程和线程→

Copyright © 2021-2025 粤ICP备2021165371号
  • 跟随系统
  • 浅色模式
  • 深色模式