有没有办法在Expressjs中限制允许的uri字符。比如设置一个字符变量:
allowed_uri_chars = 'a-zA-Z0-9'; etc
答案 0 :(得分:3)
最合乎逻辑且最简单的方法是在某些中间件中使用正则表达式:
var url = require("url");
app.use(function(req, res, next) {
var pathname = url.parse(req.url).pathname;
if(!pathname.match(/^[a-z0-9\/]+$/i)) return res.send(403);
next();
});
或者,由于URL已经被Express解析,但是没有公开显示,您可能希望保存一个调用来解析并依赖Express内部(我不建议):
app.use(function(req, res, next) {
if(!req._parsedUrl.pathname.match(/^[a-z0-9\/]+$/i)) return res.send(403);
next();
});
这可确保您的路径名(http://example.com/foo/bar?id=1334
,路径名为/foo/bar
)仅包含字母,数字和斜杠。如果没有,它会提高403.
答案 1 :(得分:1)
你不能使用正则表达式来解析授权的字符吗?
或者你的意思是直接路由?