'use strict';
|
|
const methods = require('methods');
|
const METHODS_NOT_ALLOWED = [ 'trace', 'track' ];
|
const safeHttpMethodsMap = {};
|
|
for (const method of methods) {
|
if (!METHODS_NOT_ALLOWED.includes(method)) {
|
safeHttpMethodsMap[method.toUpperCase()] = true;
|
}
|
}
|
|
// https://www.owasp.org/index.php/Cross_Site_Tracing
|
// http://jsperf.com/find-by-map-with-find-by-array
|
module.exports = () => {
|
return function notAllow(ctx, next) {
|
// ctx.method is upper case
|
if (!safeHttpMethodsMap[ctx.method]) {
|
ctx.throw(405);
|
}
|
return next();
|
};
|
};
|