Web开发的安全之旅 | 青训营笔记

157 阅读7分钟

Web开发的安全之旅 | 青训营笔记

这是我参与「第四届青训营 」笔记创作活动的的第8天

安全问题“很常见”,会危害

  • 用户 ,用户隐私
  • 公司 ,导致公司利益受损
  • 程序员(祭天),被炒鱿鱼

两个角度看web安全

  • 假如你是一个hacker一一攻击
  • 假如你是一个开发者一一防御

攻击篇

Cross-Site Scripting(XSS)

——跨站脚本攻击

跨站脚本攻击(Cross-site scripting,XSS)是一种安全漏洞,攻击者可以利用这种漏洞在网站上注入恶意的客户端代码。

危害:用户隐私泄露,用户设备被远程操控进行挖矿等

常见于:作为开发者,盲目信任用户提交内容,

作为前端工程师,直接把用户提交字符串转换为DOM

image-20220801214454033.png

XSS的一些特点

  • 通常难以从UT上感知(暗地执行脚本)
  • 窃取用户信息(cookie/token)
  • 绘制U工(例如弹窗),诱骗用户点击/填写表单

image-20220801212907925.png

XSS,按性质分为

Stored XSS

存储型 XSS 注入型脚本永久存储在目标服务器上。当浏览器请求数据时,脚本从服务器上传回并执行。

  • 恶意脚本被存在数据库中
  • 访问页面—读数据—被攻击
  • 危害最大,对全部用户可见

Reflected XSS

反射型 XSS

当用户点击一个恶意链接,或者提交一个表单,或者进入一个恶意网站时,注入脚本进入被攻击者的网站。Web 服务器将注入脚本,比如一个错误信息,搜索结果等 返回到用户的浏览器上。由于浏览器认为这个响应来自"可信任"的服务器,所以会执行这段脚本。

  • 不涉及数据库

  • 从URL上攻击

image-20220801214526624.png

DOM-based XSS

基于 DOM 的 XSS

通过修改原始的客户端代码,受害者浏览器的 DOM 环境改变,导致有效载荷的执行。也就是说,页面本身并没有变化,但由于 DOM 环境被恶意修改,有客户端代码被包含进了页面,并且意外执行。

不需要服务器的参与 恶意攻击的发起+执行,全在浏览器完成

Mutation-based XSS

突变型XSS

用户所提供的富文本内容通过javascript代码进入innerHTML属性后,一些意外的变化会使得这个认定不再成立:浏览器的渲染引擎会将本来没有任何危害的HTML代码渲染成具有潜在危险的XSS攻击代码。随后,该段攻击代码,可能会被JS代码中的其它一些流程输出到DOM中或是其它方式被再次渲染,从而导致XSS的执行。

利用了浏览器渲染DOM的特性(独特优化)

不同浏览器,会有区别(按浏览器进行攻击)

Cross-site request forgery(CSRF)

跨站请求伪造

它与XSS非常不同,XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性 CSRF参考

  • 在用户不知情的前提下
  • 利用用户权限(cookie)
  • 构造指定HTTP请求,窃取或修改用户敏感信息

image-20220801214412372.png

Injection 注入

SQL Injection

利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

image-20220801214945335.png

Injection不止于SQL

  • CLI 命令行

  • OS command 系统命令

  • Server--Side Request Forgery(SSRF),服务端伪造请求

    - 服务器端请求伪造) 是一种由攻击者构造形成由服务端发起请求的一个安全漏洞。一般情况下,SSRF攻击的目标是从外网无法访问的内部系统。(正是因为它是由服务端发起的,所以它能够请求到与它相连而与外网隔离的内部系统)
    ​
      SSRF 形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能且没有对目标地址做过滤与限制。比如从指定URL地址获取网页文本内容,加载指定地址的图片,下载等等。
    ​
      注释:除了http/https等方式可以造成ssrf,类似tcp connect 方式也可以探测内网一些ip 的端口是否开发服务,只不过危害比较小而已。
    
    • 严格而言,SSRF不是injection,但是原理类似

      SSRF参考

Denial of Service(DoS)

分布式拒绝服务攻击

亦称 洪水攻击 。 顾名思义,即是利用 网络 上已被攻陷的电脑作为“ 僵尸 ”,向某一特定的目标电脑发动密集式的“拒绝服务”式攻击,用以把目标电脑的网络资源及系统资源耗尽,使之无法向真正正常请求的用户提供服务。

  • 通过某种方式(构造特定请求),导致服务器资源被显著消耗
  • 来不及响应更多请求,导致请求挤压,进而雪崩效应。

image-20220801215448415.png

Distributed DoS(DDoS)

分布拒绝式攻击

它是在DOS基础上进行的大规模,大 范围的攻击模式,DOS只是单机和单机之间的攻击模式,而DDOS是利用一批受控制的僵尸主 机向一台服务器主机发起的攻击,其攻击的强度和造成的威胁要比DOS严重很多,更具破坏 性。首先DDOS攻击者要寻找僵尸主机,在互联网上寻找一些有后门漏洞的主机,然后入侵系 统安装控制程序,入侵的越多,控制的僵尸主机就越多,攻击源就更多,然后把入侵的主机 分配,一部分充当攻击的主要控制端,一部分充当攻击源,各负其责,在攻击者统一指挥下 对被攻击的服务器发起攻击,由于这个攻击模式是在幕后操作,所以很难被监控系统跟踪, 身份不容易被发现。短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。

攻击特点

  • 直接访问IP
  • 任意API
  • 消耗大量带宽(耗尽)

基于传输层的攻击方式

中间人攻击

Man-in-the-MiddleAttack,简称“MITM*攻击

是指攻击者与通讯的两端分别创建独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方 直接对话,但事实上整个会话都被攻击者完全控制。在中间人攻 击中,攻击者可以拦截通讯双方的通话并插入新的内容。中间人攻击是一个(缺乏)相互认证的攻击。

image-20220801220356162.png

防御篇

针对XSS攻击

  • 永远不信任用户的提交内容
  • 不要将用户提交内容直接转换成D0M

image-20220801220714383.png

防御XSS的现成工具

前端

  • 主流框架默认防御XSS
  • google-closure-library

服务端(Node)

  • DOMPurify

假如,用户需求必须动态生成DOM,该怎么办

我们要注意以下几点

  • 对string进行转义
  • 对svg图片进行检查
  • 避免自定义跳转链接
  • 避免自定义样式

Content Security Policy(CSP)

内容安全策略

是一个附加的安全层,可帮助检测和缓解某些类型的攻击,包括 跨站点脚本 和数据注入攻击。这些攻击用于从数据盗窃到网站污损再到恶意软件分发的所有内容。

  • 哪些源(域名)被认为是安全的
  • 来自安全源的脚本可以执行,否则直接抛错
  • 对eval+inline script 进行拒绝

CSRF的防御

image-20220801221642601.png

image-20220801222238843.png

image-20220801222345031.png

image-20220801222436642.png DENY表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。

SAMEORIGIN表示该页面可以在相同域名页面的 frame 中展示。

CSRF anti-pattern 反模式

image-20220801222744482.png

SameSite Cookie

Cookie 的 SameSite 属性

image-20220801223152688.png

SameSiteCORS
Cookie发送资源读写(HTTP请求)
domain vs页面域名资源域名Vs页面域名
出这屋我可就不认了白名单

PS:

内容实在太多,

更多内容,请见下回分享