nodejs 中如何校验请求中的 referer

2022年2月23日 361点热度 0人点赞 0条评论
图片


使用nodejs做服务器,接收到的请求千奇百怪,如何判断请求中的referer呢?


我们在写 nodejs 服务时,经常需要校验请求中的 referer 字段。有些只需要校验 referer 中的 hostname 是否合法即可,有些则要校验 referer 中的协议或者端口。

同时,接收到的 referer 字段最后还有个斜杠/,若我们使用完全相等判断法,可能会造成前后端联调不太方便。

那么该如何更方便的校验 referer 呢?

这就要用到我们在上一篇文章如何在 nodejs 的原生 http 服务中获取请求参数中讲到的URL构造函数,这个函数可以把 url 拆分成几部分,然后我们可以分别进行判断。

如,我们设置几个 referer 白名单,同时不限制端口:

// 从headers中获取到referer
const { referer, origin, host } = req.headers;
const selfOrigin = referer || origin || `//${host}`;

// 只匹配中间的域名,协议和端口均忽略
const { hostname } = new URL(selfOrigin, 'http://localhost/');

// 设置访问白名单
const ALLOW_HOSTS = ['joke.qq.com''news.qq.com'];

// 当不在白名单中时,则返回403
if (!ALLOW_HOSTS.includes(hostname)) {
  res.status(403).end('403 forbidden');
  next('403 forbidden');
}

若需要校验端口时,可以再加上端口的判断,如端口只能是空、80和443等。

图片

NextJs 如何按服务端或浏览器端的类型分别打包

如何在 nodejs 的http服务中获取请求参数

使用 nodejs 中的 http 模块实现几个超实用的工具

图片

我是来自腾讯的前端开发工程师,


长按识别二维码关注,与大家共同学习

图片

30910nodejs 中如何校验请求中的 referer

这个人很懒,什么都没留下

文章评论