使用变量防盗链的referer模块

362 阅读1分钟

referer模块只提供变量以及修改变量的值。该模块默认是被编译进nginx中的,可以使用--without=http_referer_module禁用。

一、场景

referer模块能获取到HTTP请求头部的referer值,从而知道该请求来自哪个页面,该值和document.referer值一致,document.referer源自HTTP referer。

比如,我重新启动一个react项目,在项目中加入一个链接如下:

该链接的地址为x.threatbook.cn/,点击该链接,打开x社…

二、使用referer模块的目的

使用referer模块的目的是为了拒绝某些网站访问我们的站点资源。

三、思路

使用invalid_referer变量来判断是否合法。

四、指令

一共有三个指令:

  • valid_referers:可取值为none、blocked、server_names、string等,可出现的上下文为location、server。

  • referer_hash_bucket_size:值为一个size,表示hash表的大小,该hash表用于存放上面valid_referers值与域名的映射,提高访问速度。默认值为24字节。

  • referer_hash_max_size:bucket的最大个数。默认值为2048字节。

1、valid_referers

参数值如下:

  • none:当没有referer头部字段时,也允许访问。

  • blocked:有referer字段,但是referer字段为空时,也允许访问。

  • server_names:如果referer中站点域名和server_name中某一个域名相匹配,则允许改请求访问。

  • 正则表达式:如果referer中的域名匹配上正则表达式,则允许访问。

2、invalid_referer变量

允许访问时,invalid_referer字段为空,不允许访问时,该字段为1。

攻击者可以伪造referer头部,并且成本非常低,所以referer的防盗不是特别好。