Web安全 | 青训营笔记

62 阅读4分钟

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

Web 开发的安全之旅

一、重点知识介绍

  • 攻击手段

  • 防御手段

二、详细知识点介绍(攻击篇)

1. XSS攻击(威胁最大)

主要利用了盲目信任用户填写的内容,没有进行过滤导致的

image.png 特点:

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

存储型XSS攻击:

image.png

反射型XSS攻击:

不涉及到数据库,从url上进行攻击。一般服务器会根据url里的参数来对应生成页面,而受到攻击后会生成其他页面或者仿造页面

image.png

基于dom

不需要服务器参与,恶意攻击的发起和执行全在浏览器上执行,与反射型的区别是恶意脚本的注入方式不一样。反射型主要是通过服务器向浏览器进行注入恶意脚本,而基于dom的主要是由恶意脚本直接向浏览器进行注入

基于Mutation(按浏览器特性攻击)

image.png

例如title的值里含有noscript的闭合标签,但是包裹在字符串里,过滤工具发现不了,等真正实现时会报错

image.png

2. CSRF攻击——跨站伪造请求

通过仿造表单或者是其他接口,模拟用户行为向服务器发送请求,利用用户的相关信息来骗过服务器,误以为是用户本人的请求

方式:

  • GET
  • POST

3. Injection注入

最常见的莫过于SQL注入,原理是攻击者的字符串是特定的某些SQL语句或者是Linux语句,如果服务器没有过滤规则,服务端读取请求的时候会顺带执行了里面的SQL语句,从而攻击者可以对数据库可以进行操作

image.png

4.SSRF

针对内网的一种攻击,通过请求【用户自定义】的callback URL

image.png

5.DoS服务拒绝

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

  • 利用正则表达式的贪婪模式,服务器端若写了含有贪婪模式的正则表达式,则可能被利用,攻击者发起导致会回溯许多次的字符串等
  • DDoS,与上一种贪婪不同,这一种不图发送复杂请求,而是采取数量上获胜,直接访问IP,指望消耗大量带宽(洪水攻击)

6.中间人攻击

主要是基于传输层的攻击,在服务器和浏览器之间进行攻击

三、详细知识点介绍(防御篇)

1.XSS的防御

主流框架默认防御XSS,尽量避免动态生成dom

如果必须根据用户来生成dom,则需要格外注意,对字符串进行转义,对文件进行扫描等

2.CSP策略

前置知识同源策略:意思是协议,域名,端口都相同的请求不会被拒绝,不同的时候根据服务器来决定

CSP能够允许我们开发者去定义那些源(域名)是安全的,来自安全源的脚本可以被执行,否则直接抛错 ,也可以对内联的script语句直接拒绝

image.png

image.png

3.CSRF防御

对异常来源进行校验,根据Origin + Referrer的方式。在请求头部中,同源发送的get和head请求方式是不会发送origin字段。

通过token

思路是,如果是合法的页面发送的请求,那么该合法页面之前也会有请求发送的记录,有着用于标识token image.png

但是攻击者可能也是注册者,有自己的token去模拟试探,将token绑定给具体用户而不是虚拟的。 同时给token设置一个过期时间,定时更新。

限制同源后对iframe攻击的防御

根据http的响应头部,设置X-Frame-Options的值来防御

值有DENY(当前页面不能作为iframe加载)/SAMEORIGIN(必须是同源的页面才能加载这个iframe)

SameSite Cookie

image.png

1659174307530.png

4.DOS防御

1659174511080.png

DDoS则是从过滤和抗量两个角度出发,对流量进行监控并作出反应

四、课堂小结

防御方应该永远不要相信用户的输入内容,对内容都要考虑过滤。在写代码时应时刻记着可能的攻击方式,尤其是动态生成dom时。从开发者角度来说我们是防御方,应该注意各自常见的攻击,安全问题一直是很重要的,这节课扩充了我对安全方面的知识面,十分有用。