登陆
服务端代码
const Koa = require(“koa”);
const app = new Koa();
const route = require(‘koa-route’);
var bodyParser = require(‘koa-bodyparser’);
const cors = require(‘@koa/cors’);
// 临时用一个变量来存储,实际应该存在数据库中
let currentUserName = ‘’;
app.use(bodyParser()); // 处理post请求的参数
const login = ctx => {
const req = ctx.request.body;
const userName = req.userName;
currentUserName = userName;
ctx.response.body = {
msg: ‘登陆成功’
};
}
const home = ctx => {
ctx.body = currentUserName;
}
app.use(cors());
app.use(route.post(‘/login’, login));
app.use(route.get(‘/home’, home));
app.listen(3200, () => {
console.log(‘启动成功’);
});
点击登陆将输入信息提交到服务端,服务端使用变量 currentUserName
来存储当前的输入内容,登陆成功后,跳转到 首页, 服务端会返回当前的用户名。如果用户输入了恶意脚本内容,则恶意脚本就会在浏览器端执行。
在用户名的输入框输入 <script>alert('存储型 XSS 攻击')</script>
,执行结果如下
存储型XSS
基于DOM(DOM based XSS)
通过恶意脚本修改页面的DOM节点,是发生在前端的攻击
基于DOM攻击大致需要经历以下几个步骤
-
攻击者构造出特殊的URL,其中包含恶意代码
-
用户打开带有恶意代码的URL
-
用户浏览器接受到响应后执行解析,前端JavaScript取出URL中的恶意代码并执行
-
恶意代码窃取用户数据并发送到攻击者的网站,冒充用户行为,调用目标网站接口执行攻击者指定的操作。
举个例子:
提交
点击提交按钮,会在当前页面插入一个