# 一.XSS(存储型)
前言
恶意代码被存储到数据库中,用户点击页面之后会继续执行恶意代码,能持续攻击不同的用户
# 1.案例一
持久型 XSS
攻击步骤(黑客将代码存储到漏洞服务器中,用户浏览相关页面发起攻击)
- 1.黑客将恶意脚本代码上传或存储到漏洞服务器
- 2.服务器把恶意脚本保存到服务器
- 3.当正常客户访问服务器时,服务器会读取恶意数据并且直接使用
- 4.服务器会返回含有恶意脚本的页面
类型 | 反射型 | 存储型 |
---|---|---|
持久性 | 非持久 | 持久化(存储在服务器) |
触发时机 | 需要用户点击 | 不需要用户交互也可以触发 |
危害 | 危害较小 | 危害更大 |
# 1.1 前端部分
# 1.2 后端部分
const express = require("express")
const fs = require("fs")
const path = require("path")
const app = express()
const bodyParser = require("body-parser")
app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json())
app.use(express.static(path.resolve(__dirname, "public")))
let defaultComment = {
time: new Date().toLocaleString(),
avatar: "http://www.gravatar.com/avatar/836875012qq.com.png",
}
let comments = [
{ username: "张三", content: "今天下雨没带伞", ...defaultComment },
{ username: "李四", content: "今天没带伞", ...defaultComment },
]
app.get("/api/comments", function(req, res) {
res.json({ code: 0, comments })
})
app.post("/api/comments", function(req, res) {
let comment = req.body
comments.push({
...defaultComment,
username: comment.username,
content: comment.content,
})
res.json({ code: 0 })
})
app.listen(3001, () => {
console.log("The server is starting at port 3001")
})
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 2.场景
# 2.1 聊天软件
- 用户在群中发送危险链接
# 2.2 学习社区
- 作者在文章中留下危险链接
# 3.防范
总结
一般会存入网站数据库,比如留言板,网站后台日志啥的,等受害者或管理员查看点击链接时,发生访问 xss 平台并被记录 cookie 的情形