nginx:防盗链

简单有效的防盗链手段:referer模块(从浏览器中发起的请求)

默认编译进nginx,通过--without-http_referer_module禁用

目的:拒绝非正常网站访问我们站点资源

场景:某网站通过url引用了你的页面,当用户在浏览器上点击url时,http请求的头部中会通过refer而头部,将该网站当前页面的url带上,告诉服务器本地请求是由这个页面发起的

思路:通过referer模块,用invalid_referer变量根据配置判断referer头部是否合法

 

invalid_referer变量:允许访问时,变量值为空。不允许访问时变量值为1

 

1.valid_referers指令(可同时携带多个参数,表示多个referer头部都生效)

语法:valid_referers none | blocked | server_names | string ...;

默认:空

放置位置:server,location

参数值解析:

      none:允许缺失referer头部的请求访问

      block:允许referer头部没有对应的值的请求访问

     server_names:若referer中站点域名与Server_name中本机域名某个匹配,则允许该请求访问

    表示域名及URL的字符串,对域名可在前缀或者后缀中含有*通配符,若referer头部的值匹配字符串后,则允许访问

    正则表达式,若referer头部的值匹配正则表达式后,则允许访问

 

2.referer_hash_bucket_size指令

语法:referer_hash_bukcet_size  size;

默认:referer_hash_bukcet_size  64;

放置位置:server,location

3.referer_hash_max_size指令

语法:referer_hash_max_size  size;

默认:referer_hash_max_size  2048;

放置位置:server,location

 

另一种解决方案:secure_link模块(攻击者伪造referer头部 )

过程由某服务器生成加密后的安全连接url,返回个客户端。客户端使用安全url访问nginx,由nginx的secure_link变量判断是否验证通过

原理:

 (1)哈希算法是不可逆的

(2)客户端只能拿到执行过哈希算法的URL

(3)仅生成URL的服务器,验证URL是否安全的nginx这二者,才保存执行哈希算法前的原始字符串

(4)原始字符串通常由以下部分有序组成

    ①资源位置:例如HTTP中指定资源的URI,防止攻击者拿到一个安全URL后可以访问任意资源

   ②用户信息:例如用户IP地址,限制其他用户盗用安全URL

   ③时间戳:使安全URL及时过期

   ④密钥:仅服务器端拥有,增加攻击者猜测出原始字符串的难度

ngx_http_secure_link_module模块:默认未编译进nginx,需要通过--with-http_secure_link_module添加

常用变量:secure_link,secure_link_expires

1.secure_link指令

语法:secure_link expression;   (值为空:验证不通过。值为0:URL过期。值为1:验证通过)

默认:空

放置位置:http,server,location

 

2.secure_link_md5指令

语法:secure_link_md5 expression;(时间戳的值)

默认:空

放置位置:http,server,location

 

 nginx中配置

   secure_link $arg_md5,$arg_expires;

  secure_link_md5 "$secure_link_expires$uri$remote_addr secret";(构造原始字符串的顺序)

 

3.secure_link_secret指令

语法:secure_link_secret word;

默认:空

放置位置:location

nginx配置:

   secure_link_secret secret;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值