Web安全 丨 青训营笔记

64 阅读1分钟

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

标题:「Web 开发的安全之旅」第四届字节跳动青训营 - 前端专场

网址:live.juejin.cn/4354/yc_sec…

攻击

Cross-Site Scripting(XSS)

盲目信任用户的提交内容

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

可以直接提交恶意脚本

Stored XSS

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

eg. Reflected XSS Demo

host/path/?param=<script>alert('123')</scrpit>

DOM-based XSS demo

const concent = new URL(localtion.href)searchParams.get("param");
const div = document.creatElement("div");
//恶意脚本注入
div.innerHTML = content;
document.body.append(div);

image.png

Mutation-based XSS

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

image.png 最难防御的方式

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

image.png

image.png

SQL Injection

image.png

image.png

CLI; OS command;

Server-Slide Request Forgery(SSRF), 服务器伪造请求(严格来说不是Injection)

DoS Denial of Service

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

正则表达式--贪婪模式

image.png

ReDos:基于正则表达式的DoS

image.png

DDos Distributed DoS 量大 攻击特点: 直接访问IP 任意API 消耗大量带宽

SYN FLood

image.png

传输层攻击

中间人攻击出现的原因: 明文传输 信息篡改不可知 对方身份未验证

防御篇

XSS

永远不要相信用户提交的内容,不要直接转换成DOM,当成String对待

现成方式:

image.png

如果用户需求必须动态生成DOM: 对String转义 对svg图片扫描 小心自定义跳转链接 自定义样式

播插:Same-origin-Policy 协议 域名 端口通通相等

Content Security Policy(CSP) 那些源是被认为安全的 来自安全源的脚本可以执行,否则直接抛错 对eval + inline script说no

image.png

CSRF的防御

image.png

CSRF-token

image.png

CSRF-iframe攻击

image.png 避免用户信息被携带:SameSite Cookie

image.png 限制的是Cookie Domain和页面域名

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

Set-Cookie: SameSite = None; Secure;

SameSite VS CORS

image.png

SameSite demo

FirstPartyCookie 3PartyCookie

image.png

防御CSRF的正确姿势 Middlewares:专门生成各种防御CSRF的策略

Injection beyond SQL

image.png

image.png

image.png

防御中间人

image.png

HTTPS的一些特性

image.png

image.png

image.png

插播:数字签名 image.png

HTTPS-不可抵赖:数字签名

image.png

HTTP Strict-Transport-Security(HSTS)

image.png

SRI-demo

image.png