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

175 阅读4分钟

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

mobilebanner.png

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

关注开发安全的意义

随着技术的不断更新迭代,用户的网上隐私问题,公司的财产安全问题,都成为了至关重要的问题。一份产品的好坏不单止用户体验要好,更重要是使用的对象要用的安全,所以开发的安全性问题十分重要。本文着重讲述Web开发的安全问题,一方面从黑客攻击角度讲述Web攻击方面问题,一方面从白客防御角度来讲述Web防范攻击方面问题。

攻击篇

  • XSS(cross-Site Scripting 跨站脚本攻击)
  • CSRF(cross-Site request forgery 跨站请求伪造)
  • SQL注入(SQL Injection)
  • SSRF(Server-Side Request Forgery 网络服务器端请求伪造)
  • DoS(Denial of Service 拒绝服务)
  • 中间人攻击

XSS

攻击原理

浏览器盲目信任用户提交的内容,用户提交的字符串解析为Js代码(也用可能是html代码)处理,从而造成攻击者的目的达成。

ac36f029-4acc-4c15-b2a0-d1aba54d4ef3.png

XSS的特点

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

XSS demo

05986836-11e2-4793-8bbb-122d9fb2cc5b.png

595a3f24-9f0b-4cd4-a466-ed61a89d0cf3.png 图中提交的内容中包括JS脚本,当拿到数据时浏览器会解析JS脚本从而执行,alert了‘XSS’

stroed XSS

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

d9e6e8f9-1d97-489d-9d3f-d099c10a9afa.png

Reflected XSS

  • 不涉及数据库
  • 从URL上攻击

ddef2458-c850-4b2c-9c60-6f4f23aac429.png

把恶意脚本写到URL的param参数上从而提交到代码中,然后浏览器解析脚本从而执行恶意脚本

DOM-based XSS

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

32592fd5-9900-4255-8fb1-ef47120e6a34.png 直接声明一个新的内容,然后通过innerHtml等api将恶意脚本插入div等,再插入DOM树,全部在浏览器完成

Reflected 和 DOM-based的不同

0e3392fb-7e80-4cb7-a800-380a65002522.png Reflected XSS会通过服务器,而DOM-based XSS完全通过浏览器完成

Mutation-based XSS

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

0edb9f5b-33d1-4681-b3d1-bb4acf12f570.png

15ace09f-c956-4cf2-8b37-dc2d62d4ec30.png 图中就利用了tile属性在不同浏览器,不同的环境解析得到了三个不同的结果。从而发起对特有浏览器的攻击。

CSRF

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

4565aa9f-0376-4ef1-84ef-7aaea803cb06.png

SQL Injection

下载.png

SQL Injection demo

29738e25-bc46-48ef-b6d7-555e44a7f0d4.png

  • 读取请求字段
  • 直接以字符串的形式拼接SQL语句

其他Injection

  • CLI
  • OS command
  • Server-Side Request Forgery (SSRF),服务端伪造请求
  • 严格来说,SSRF不是injection,但是原理了类似

SSRF demo

3fb36b13-1d14-4488-84f8-b74b13cbdd64.png

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

Dos

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

ReDos(基于正则表达式的Dos)

下载 (1).png

Logical Dos

  • 耗时的同步操作
  • 数据库写入
  • SQL join
  • 文件备份
  • 循环执行逻辑

Distributed Dos(DDoS)

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

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

中间人攻击

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

下载 (2).png

防御篇

XSS防御

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

XSS防御工具

下载 (3).png

必须生成DOM的几个做法

  • 利用new DOM parser()
  • 上传svg
  • Blob动态生成script
  • 自定义跳转链接
  • 自定义样式

CSP(Content Security Policy)

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

CSPF防御

下载 (4).png

CSRF--token

下载 (5).png 先有页面,后有请求

1da25ab4-502d-40a0-ab86-8a35a98572ed.png

  • 用户绑定:攻击者也可以是注册用户===可以获取自己的token
  • 过期时间:【前向保密】

CSRF--iframe攻击

下载 (6).png

SameSite Cookie

896d10c4-55ee-407f-a336-1b5044ed9ef8.png

a3926f9e-546f-4d56-ba48-c74d505f4994.png

SameSite和CORS的对比

下载 (7).png

Injecttion beyond SQL

下载 (8).png

Regex DoS

9832b82d-a2b4-4617-8939-14a29b03cd8e.png

Logical DoS

b928638d-d77d-44ac-9670-33f99032fb6e.png

DDoS

下载 (9).png

防御中间人

下载 (10).png

总结

  • 安全无小事
  • 使用的依赖(npm package,甚至是Node JS)可能成为最薄弱的一环
  • 保持学习的心态,是技术就会有漏洞,要不断地补漏洞,不断地作优化。