[ Web 开发安全 - 攻击篇 | 青训营笔记]

168 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 17 天,以下是我根据课程内容整理的笔记。

课程介绍

在网络时代下,Web 安全随处可见并且危害极大,Web 安全问题也越来越受到重视。基于此背景,本节课将从安全问题中「攻击者」的角色出发,讲解目前存在哪些技术手段将危害到 Web 安全。

课程重点

  1. Cross-Site Scripting(XSS)
  2. Cross-site request forgery(CSRF)
  3. 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

image.png

Cross-site request forgery(CSRF)

  • 在用户不知情的前提下

  • 利用用户权限(cookie)

  • 构造指定HTTP请求,窃取或修改用户敏感信息

CSRF demo

① 用户没有访问银行页面

② 银行页面中的特定接口被请求

③ 请求执行成功

image.png

SQL Injection

image.png

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