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

80 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第3天
感觉今天的课很有意义,浅记录一下课堂内容

两个角度看web安全

攻击者,防御者

一、攻击篇

1、跨站脚本攻击xss

跨站脚本攻击是开发维护页面中,攻击者通过注入恶意脚本
主要利用了开发者盲目信任用户提交的内容,直接把用户提交的直接转换成dom 特点:

  • 通常难以从ui上感知(暗地执行脚本)
  • 窃取用户信息(cookie/token)
  • 绘制ui(例如弹窗),诱骗用户点击、填写表单 一些xss的demo:
  • Stored XSS存储型xss攻击,直接存到数据库中,危害最大,对全部用户都可见。

如果是攻击者就可以提交一个script标签插入html中

  • Reflected XSS反射型,不涉及数据库,从URL上攻击 如果把字段构造一个恶意script标签,当用户访问页面时,就会命中xss攻击
  • Dom-based XSS不需要服务器参与,恶意攻击的发起和执行全部在浏览器完成

    DOM和Reflected区别:
  • Mutation-base XSS按浏览器区别攻击
    2、跨站伪造请求CSRF 没有访问某个网页,却在该页面中特定接口被请求,且请求执行成功
  • 在用户不知情的情况下
  • 利用用户权限(cookie)
  • 构造指定的http请求窃取信息

GET请求或者任意形式 构造一个html表单即可攻击

3、Injection(注入)

  • SQL注入:通过恶意注入sql参数非法获得数据库的权限

  • CLI

  • OS command

  • SSRF 视频格式在转换,接受option参数,无过滤。攻击者传入一个系统命令,可以直接对服务器的目标文件执行操作,读取修改或删除
    转移流量,对竞争对手的服务器发起攻击令其挂掉

callback URL不进行过滤会暴露内网信息,暴露内网访问权限

  • DoS 构造特定请求,消耗服务器资源,导致服务器雪崩

  • ReDos:基于正则表达式的DoS 贪婪:N次不行?N-1再试试?无限回溯。导致响应时间高,接口吞吐量变低

  • DDoS最常见的DoS攻击,来自大量僵尸设备的请求,就是量大 直接访问ip,直接目的消耗带宽 洪水攻击:发送大量TCP请求,但攻击者不反回第三次ACK,导致三次握手不能完成,Connection不能被释放,新请求无法响应。

基于传输层的攻击: 1、中间人攻击 在服务器和客户端的信息交互中多了个中间人 中间人会窃取信息,修改请求,返回 产生原因:明文传输,不知道信息篡改,对方身份未验证

二、防御篇

1、针对XSS

不信任用户提交的内容,不把用户提交内容直接转换成DOM 现成工具: 前端:

  • 主流框架 服务器(Node):
  • DOMPurify 如果用户需求不讲武德,必须动态生成DOM:
    1.1、转义
    1.2、扫描上传svg
    1.3、不做让用户自定义跳转行为,做好过滤
    1.4、自定义样式
    当某个特定标签被选中时,触发GET请求。

2、Same-orign Policy

对于http请求,一般同源yes,不同源no SCP:\

  • 哪项域名安全
  • 对某些标签eval+inline script直接抛错

3、CSRF防御

捕获.JPG

捕获2.JPG

4、不带cookie:SameSite Cookie

一种可以防御CSFPF的防御模式

捕获ssc.JPG

5、Injection

找到SQL查询的地方,使用prepared statement Injection beyong SQL

  • 最小权限
  • 建立白名单
  • 对URL类型参数进行协议域名IP等限制

6、Regex DoS

  • 避免写贪婪算法
  • 代码扫描+正则性能测试
  • 拒绝用户提供的正则

7、DDoS防御思路

DDOS.JPG

8、传输层防御方式:防御中间人HTTPS

特点:

  • 可靠性:加密,避免明文传输
  • 完整性:MAC认证,确保信息没有被篡改
  • 不可抵赖性:数字签名确保身份
    https流程:

http.JPG

9、SRI

静态资源被篡改?对比哈希值!

sri.JPG

10、Feature Policy/Permission Policy

在一个源/页面开发者可以使用哪些功能?
就算被攻击,也可以限制页面不能调用一些敏感的东西

尾声

使用的依赖(npm package ,甚至是NodeJS)可能成为最薄弱的一环

  • left-pad事件

  • eslint-scope事件

  • event-stream事件 npm install黑洞还有漏洞