
// oauth_server.js - OAuth2 provider issuing tokens in fragment
const express = require('express');
const app = express();
app.get('/authorize', (req, res) => {
const redirectUri = req.query.redirect_uri;
const state = req.query.state || '';
// Simulate user approval: redirect with access token in fragment
const token = 'secret_access_token';
res.redirect(`${redirectUri}#access_token=${token}&state=${state}`);
});
app.listen(3000, () => console.log('OAuth server on :3000'));
OAuth2 提供程序实现了隐式授权流程,但没有对照白名单验证 redirect_uri。攻击者可以提供恶意 URI,在用户完成身份验证后,访问令牌会通过 URL 片段泄露到攻击者的页面。
redirect_uri 是否与预先注册的值完全匹配,从而允许重定向到攻击者控制的域名。npm install express
node oauth_server.js
python exploit_fragment_hijack.py