这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天,以下是我根据课程内容整理的笔记。
课程介绍
在网络时代下,Web 安全随处可见并且危害极大,Web 安全问题也越来越受到重视。基于此背景,本节课将从安全问题中「攻击者」的角色出发,讲解目前存在哪些技术手段将危害到 Web 安全。
课程重点
- Cross-Site Scripting(XSS)
- Cross-site request forgery(CSRF)
- Injection
笔记内容
两个角度看web安全
-
假如你是一个hacker--攻击
-
假如你是一个开发者--防御
Cross-Site Scripting(XSS)
XSS主要利用了
XSS
=
「盲目信任用户的提交内容」
+
string → D0M
- document.write
- element.innerHTML anyString;
- SSR(user_data)//伪代a码
XSS的一些特点
-
通常难以从UT上感知(暗地执行脚本)
-
窃取用户信息(cookie/token)
-
绘制UT(例如弹窗),诱骗用户点击/填写表单
Stored XSS
-
恶意脚本被存在数据库中
-
访问页面 → 读数据:== 被攻击
-
危害最大,对全部用户可见
Reflected XSS
Reflected
-
不涉及数据库
-
从 URL 上攻击
DOM-based XSS
-
不需要服务器的参与
-
恶意攻击的发起+执行,全在浏览器完成
Reflected vs DOM-based
Cross-site request forgery(CSRF)
-
在用户不知情的前提下
-
利用用户权限(cookie)
-
构造指定HTTP请求,窃取或修改用户敏感信息
CSRF demo
① 用户没有访问银行页面
② 银行页面中的特定接口被请求
③ 请求执行成功
SQL Injection
Injection demo 1
① 读取请求字段
② 直接以字符串的形式拼接SQL语句
public async renderForm(ctx) {
const {username,form_id} = ctx.query;
const result = await sql.query(`
SELECT a,b,c FROM table
WHERE username =${username}
AND form_id = ${form_id}
`)
ctx.body = renderForm(result);
}
Injection不止于SqL
-
CLI
-
OS command
-
Server-Side Request Forgery(SSRF),服务端伪造请求
- 严格而言,SSRF不是injection,但是原理类似
Injection demo2--读取+修改
① 流量转发到真实第三方
② 第三方扛不住新增流量
③ 第三方服务挂掉
④ 您的竞争对手已下线
结语
通过本次课程的学习,真的收获到了许多,初步了解了Cross-Site Scripting(XSS)、Cross-site request forgery(CSRF)、Injection