Hijacking Headers
by Bret Lowrey
HTML
<script src="https://wzrd.in/standalone/minimist@latest"></script>
<script src="https://wzrd.in/standalone/expect@latest"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/superagent/2.3.0/superagent.min.js"></script>
<body>
Fetching header...
</body>
Babel + JSX
const interceptHeaders = (headerMatch, callback) => {
let setRequestHeader = XMLHttpRequest
.prototype.setRequestHeader;
XMLHttpRequest.prototype.setRequestHeader = function() {
const [key, val] = arguments;
if (key && key.includes(headerMatch)) {
callback(val, key);
}
setRequestHeader.apply(this, arguments);
};
};
const test = () => {
const time = new Date().getTime();
interceptHeaders('csrf-token', csrf => {
expect(csrf).toEqual(time);
document.body.innerHTML = 'Header set as: ' + csrf;
});
superagent.get('https://httpbin.org/headers')
.set('x-csrf-token', time)
.end();
};
test();