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

51 阅读5分钟

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

Web安全——攻击

Cross-Site Scripting(xss)

恶意脚本

xss攻击形式

image.png

XSS的特点

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

XSS demo

image.png

没有对用户的操作进行过滤

stored XSS

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

Reflected XSS

  • 不涉及数据库
  • 从URL进行攻击

Reflected XSS demo

image.png

DOM-based XSS

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

DOM-based XSS demo

image.png

url相同,操作环境不同,由浏览器进行攻击

Mutation-based xss

  • 利用了浏览器渲染DOM的特性(独特优化)
  • 不同浏览器,会有区别(按浏览器进行攻击)

image.png

按浏览器不同(不同的渲染方式)进行区别攻击

Cross-site request forgery(CSRF)跨站伪造请求

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

CSRF demo

image.png

CSRF——GET

image.png

CSRF——beyond GET

image.png

表单请求

Injection

  • SQL
  • CLI
  • os command
  • Server-Side Request Forgery(SSRF),服务端伪造请求( 严格而言,SSRF 不是injection,但是原理类似)

SQL Injection

image.png

Injection demo

image.png

1、读取请求字段;2、直接以字符串的形式拼接sQL语句

image.png

执行

image.png

删除服务器文件,使服务器宕机

读取、修改

image.png

流量攻击

SSRF demo

image.png

请求【用户自定义】的callback URL;web server通常有内网访问权限。

Denial of Service(DoS)

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

正则表达式——贪婪模式

重复匹配时「?vs 「no ?:满足“一个“即可vs尽量多

image.png

ReDoS:基于正则表达式的Dos

image.png

贪婪:n次不行? n-1次再试试?——回溯。响应时间↑↑&&接口吞吐量(用户的相应次数)↓↓

Distributed DoS(DDos)

短时间内,来自大量僵尸设备的请求流量,服务器不能及时完成全部请求,导致请求堆积,进而雪崩效应,无法响应新请求。

「不搞复杂的,量大就完事儿了」

DDos特点

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

洪水攻击DDoS demo

image.png

没有完成connection不能被释放,达到最大连接数,不能产生接收新请求。

传输层攻击方式————中间人攻击方式

image.png

  • 明文传输
  • 信息篡改不可知
  • 对方身份未验证

Web安全———防御

防御XSS

永远不信任用户的提交内容

  • 一不要将用户提交内容直接转换成DOA

image.png

XSS现成防御工具

前端

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

服务端(Node)

  • DOMPurify

如果必须用户生成动态DOM

  • 对Sting进行转移
  • 对svg文件进行扫描
  • 用户自定义样式,对url图片、字体文件多加留意

image.png

Same-origin Policy

三个相同:

  • 协议
  • 域名
  • 端口

HTTP请求:同源、跨域(看服务器设置)

image.png

1、2协议不同;2、3域名不同

Content Security Policy(CSP)

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

CSP

image.png

服务器的响应头部,任何标签要同源同源,不同源不允许执行

浏览器meta

image.png

同源之外还允许域名相同可以进行攻击,可一避免某些网站攻击

CSRF的防御

image.png

不是这个页面的请求进行拒绝

CSRF——token

先有页面,后有请求

除了origin + Referrer

其他判断【请求来自于合法来源】的方式

  • if〔请求来自合法页面)
  • then (服务器接收过页面请求)
  • then c服务器可以标识)

CSPRF--token

image.png

CSRF--iframe攻击

image.png

CSRF anti-pattern

GET !== GET + POST

image.png

用户隐私数据会泄露,用户数据被篡改

SameSite Cookie

避免用户信息被携带

image.png

从根源上解决CSRGF的攻击

image.png

限制的是:

  • Cookie domain
  • 页面域名

依赖Cookie 的第三方服务怎么办?

内嵌一个×站播放器,识别不了用户登录态,发不了弹幕

Set-cookie: Samesite=None;Secure;

SameSite vs CORS

sameSite

  • Cookie发送
  • domain vs页面域名
  • “我跟你说个事儿, 出这屋我可就不认了”

CORS

  • 资源读写(HTTP 请求)
  • 资源域名vs页面域名
  • 白名单(允许访问可访问)

SameSite demo

image.png

防御CSRF 的正确姿势

image.png

中间键

lnjection的防御

  • 找到项目中查询SQL的地方
  • 使用prepared statement

image.png

除了SQL之外的Injection防御措施

最小权限原则

  • sudo || root

建立允许名单+过滤

  • rm

对URL类型参数进行协议、域名、ip等限制

  • 防止访问内网

Regex DoS

  • Code Review (×(ab*)+/)——避免写出贪婪匹配的方式
  • 代码扫描+正则性能测试
  • 拒绝使用用户提供的使用正则

DDoS防御

image.png

传输层防御

防御中间人

image.png

HTTPS的一些特性

  • 可靠性:加密————确保明文传输
  • 完整性:MAC验证————确保信息不被篡改
  • 不可抵赖性:数字签名————确保双方身份可被信任

image.png

HTTPS————完整性

image.png

接收方会对传递过来的信息进行加密一次,并对哈希值进行对比

数字签名

image.png

HTTPS的不可抵赖性————数字签名

image.png

HTTPS证书

image.png

image.png

将HTTP主动升级到HTTPS

image.png

Subresource lntegrity( SRI)

静态资源被劫持篡改?对比 hash √

image.png

image.png

标签hash(原始内容hash) vs 实际内容hash

image.png

针对某个页面下允许开发者调用某个功能(麦克风、相机)

总结

image.png