使用场景:某网站听过URI引用你的页面;当用户在网站点击url时;http头部会通过referer头部,将该网站当前页面的url带上,告诉服务本次请求是由这个页面发起的

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

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

默认:referer模块默认编译进nginx

指令介绍

Syntax: valid_referers none | blocked | server_names | string ...; #指定的域名地址
Default: —
Context: server, location
Syntax: referer_hash_bucket_size size; #希到内存里。内存的大写
Default: referer_hash_bucket_size 64;
Context: server, location
Syntax: referer_hash_max_size size;
Default: referer_hash_max_size 2048;
Context: server, location

valid_referers:参数

none:允许缺失的头部访问
block:允许referer没有对应值的请求
server_names:若referer站点域名与server_name中本机配的域名一样允许访问
表示域名及URI的字符串,对域名可在前缀或者后缀中含有*通配符:若头部值匹配字符串后则允许访问
正则表达式:若referer头部值匹配正则表达式后,允许访问
invalid_referer变量
允许访问时变量值为空
不允许访问时变量值为1
配置
server {
server_name refere.com;
access_log logs/refere.log main;
location /{
valid_referers none blocked server_name
*.taohui.pub www.taohui.org.cn/nginx/
~\.google\.;
if ($invalid_referer) {
return 403;
}
return 200 "tars\n";
}
}

  测试

[root@python vhast]# curl -H 'referer: http://refere.com.cn/ttt' refere.com
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.15.9</center>
</body>
</html>
[root@python vhast]# curl -H 'referer: http://www.taohui.pub/ttt' refere.com
tars
[root@python vhast]# curl -H 'referer: ' refere.com
tars
[root@python vhast]# curl -H '' refere.com
tars
[root@python vhast]# curl -H 'referer: http://www.taohui.tech' refere.com
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.15.9</center>
</body>
</html>
[root@python vhast]# curl -H 'referer: http://referer.taohui.tech' refere.com
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.15.9</center>
</body>
</html>
[root@python vhast]# curl -H 'referer: http://image.baidu.com/search/detail' refere.com
<html>
<head><title>403 Forbidden</title></head>
<body>
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.15.9</center>
</body>
</html>
[root@python vhast]# curl -H 'referer: http://image.google.com/search/detail' refere.com
tars

  

secure_link 模块介绍;默认未编译进去
通过验证URL中哈希值的方式防盗链
过程:由某服务器(也可以是nginx)生成加密后的安全rul,返回给客户端;客户端使用安全的uri访问,有nginx的secure_link变量是否通过
原理:哈希算法在技术上实现几乎是不可逆的;客户端只能拿到执行过哈希算法的uri;仅生产url的服务器、验证url是否安全的nginx这二者,才保存执行哈希算法钱的原始字符串;原始字符串通常由下列部分组成
1资源位置,如HTTP中指定资源的url,防止攻击者拿到一个安全url后可以任意访问资源
2用户信息,如用户的IP地址,限制其他用户盗用安全URL
3时间戳,使安全URL及时过期
4密钥,仅服务端有,增加攻击者猜测出原始字符串难度
变量:secure_link  、secure_link_expires
secure_link 指令介绍

Syntax: secure_link expression;   #值为空,不通过 为0 为过期 为1 通过
Default: —
Context: http, server, location
Syntax: secure_link_md5 expression; #怎么构造原始字符串
Default: —
Context: http, server, location
Syntax: secure_link_secret word;
Default: —
Context: location

  

 
 

nginx防盗链处理模块referer和secure_link模块的更多相关文章

  1. 六、Nginx 防盗链

    盗链是指一个网站的资源(图片或附件)未经允许在其它网站提供浏览和下载.尤其热门资源的盗链,对网站带宽的消耗非常大,本文通过nginx的配置指令location来实现简单的图片和其它类型文件的防盗链. ...

  2. 使用NGINX+LUA实现WAF功能 和nginx 防盗链

    使用NGINX+LUA实现WAF功能 一.了解WAF 1.1 什么是WAF Web应用防护系统(也称:网站应用级入侵防御系统 .英文:Web Application Firewall,简称: WAF) ...

  3. Nginx防盗链的3种方法

    一:一般的防盗链如下: location ~* \.(gif|jpg|png|swf|flv)$ { valid_referers none blocked www.jzxue.com jzxue.c ...

  4. nginx防盗链、nginx访问控制、nginx解析php相关配制、nginx代理

    1.nginx防盗链编辑:vim /usr/local/nginx/conf/vhost/test.com.conf写入: location ~* ^.+\.(gif|jpg|png|swf|flv| ...

  5. nginx防盗链配置

    Ps:防盗链的意义就是保证自己的版权,不免网站的流量流失,为他人做嫁衣.下面是网上看到的三种方法: 修改 /usr/local/nginx/conf/nginx.conf 这个配置文件.找到locat ...

  6. Nginx防盗链配置案例配置,Nginx的知识分享

    防盗链的含义:网站内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容. 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址 ...

  7. Nginx系列二:(Nginx Rewrite 规则、Nginx 防盗链、Nginx 动静分离、Nginx+keepalived 实现高可用)

    一.Nginx Rewrite 规则 1. Nginx rewrite规则 Rewrite规则含义就是某个URL重写成特定的URL(类似于Redirect),从某种意义上说为了美观或者对搜索引擎友好, ...

  8. Nginx防盗链、访问控制、解析PHP相关配置及Nginx代理

    6月11日任务 12.13 Nginx防盗链12.14 Nginx访问控制12.15 Nginx解析php相关配置12.16 Nginx代理 扩展502问题汇总 http://ask.apelearn ...

  9. Linux centos VMware Nginx防盗链、Nginx访问控制、Nginx解析php相关配置、Nginx代理

    一.Nginx防盗链 配置如下,可以和上面的配置结合起来 location ~* ^.+\.(gif|jpg|png|swf|flv|rar|zip|doc|pdf|gz|bz2|jpeg|bmp|x ...

随机推荐

  1. linux 磁盘100% 清理

    df -h  查看磁盘使用有一个vdb满了 df   -i 查看inode 使用率 显示文件大小: du -sh /* du参数: -a : 列出所有的文件与目录容量,因为默认仅统计目录下面的文件量而 ...

  2. 连接mongodb服务

    语法:mongo.exe ip地址:端口号/数据库名(默认连接test) mongodb的默认端口号:27017 MongoDB内部结构   MongoDB MySQL 文档(Document) 记录 ...

  3. springboot去除内嵌tomcat和打包在tomcat中运行需要做的步骤

    去除内嵌tomcat和添加jsp依赖 去除内嵌tomcat 在springboot启动依赖中去除内嵌tomcat <dependency> <groupId>org.sprin ...

  4. The Preliminary Contest for ICPC Asia Xuzhou 2019 E XKC's basketball team(排序+二分)

    这题其实就是瞎搞,稍微想一想改一改就能过. 排序按值的大小排序,之后从后向前更新node节点的loc值,如果后一个节点的loc大于(不会等于)前一个节点的loc,就把前一个节点的loc值设置为后面的l ...

  5. go语言下载及安装

    go语言下载地址:https://studygolang.com/dl 在cmd输入go 如果显示这样,说明安装成功 go env -w GOPROXY=https://goproxy.cn,dire ...

  6. java篇 之 数组

    数组:本身也是对象元素数据类型必须一致,初始值为各种零(跟类型一致),数组中存放 的是对象的引用(地址),对象在其它空间,一旦创建长度不可变,length可以直 接访问 (new的时候才分配空间,创建 ...

  7. [Linux kali] linux kali [KDE]一些软件切换输入法无效

    #开始 今天最终是在实体机安装了Kali Kali的默认桌面是GNOME桌面 但是用久了windows桌面用这个实在是不习惯 然后看到了kali有自带KDE版本的 然后就下载了一个尝尝鲜 之前在Deb ...

  8. 吴裕雄--天生自然神经网络与深度学习实战Python+Keras+TensorFlow:LSTM网络层详解及其应用

    from keras.layers import LSTM model = Sequential() model.add(embedding_layer) model.add(LSTM(32)) #当 ...

  9. Spring bean的bean的三种实例化方式

     Bean 定义 被称作 bean 的对象是构成应用程序的支柱也是由 Spring IoC 容器管理的.bean 是一个被实例化,组装,并通过 Spring IoC 容器所管理的对象.这些 bean ...

  10. java编译器不匹配问题(java compiler level does not match the version of the installed java project facet)

    问题:项目经常copy过来,经常会报说Java编译器不匹配 解决方法:找到项目所在的目录,在.settings子目录里面,用文本编辑器打开org.eclipse.wst.common.project. ...