这篇文章主要介绍“Nginx如何防盗链”,在日常操作中,相信很多人在Nginx如何防盗链问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Nginx如何防盗链”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!如果做过个人站点的同学,可能会遇到别人盗用自己站点资源链接的情况,这就是盗链。说到盗链就要说一个 HTTP 协议的 头部,referer 头部。当其他网站通过 URL 引用了你的页面,用户在浏览器上点击 URL 时,HTTP 请求的头部会通过 referer 头部将该网站当前页面的 URL 带上,告诉服务器本次请求是由谁发起的。例如,在谷歌中搜索 Nginx 然后点击链接:在打开的新页面中查看请求头会发现,请求头中包含了 referer 头部且值是 https://www.google.com/。像谷歌这种我们是允许的,但是有一些其他的网站想要引用我们自己网站的资源时,就需要做一些管控了,不然岂不是谁都可以拿到链接。这里目的其实已经很明确了,就是要拒绝非正常的网站访问我们站点的资源。invalid_referer 变量referer 提供了这个变量,可以用来配置哪些 referer 头部合法,也就是,你允许哪些网站引用你的资源。要实现上面的目的,referer 模块可得算头一号,一起看下 referer 模块怎么用的。默认编译进 Nginx,通过 --without-http_referer_module
禁用referer 模块有免费云主机域名三个指令,下面看一下。这里面最重要的是 valid_referers
指令,需要重点来说明一下。可以同时携带多个参数,表示多个 referer 头部都生效。none允许缺失 referer 头部的请求访问block:允许 referer 头部没有对应的值的请求访问。例如可能经过了反向代理或者防火墙server_names:若 referer 中站点域名与 server_name 中本机域名某个匹配,则允许该请求访问string:表示域名及 URL 的字符串,对域名可在前缀或者后缀中含有 * 通配符,若 referer 头部的值匹配字符串后,则允许访问正则表达式:若 referer 头部的值匹配上了正则,就允许访问允许访问时变量值为空不允许访问时变量值为 1下面来看一个配置文件。那么对于这个配置文件而言,以下哪些请求会被拒绝呢?我们需要先来解析一下这个配置文件。 valid_referers
指令配置了哪些值呢?none:表示没有 referer 的可以访问blocked:表示 referer 没有值的可以访问server_names:表示本机 server_name 也就是 referer.ziyang.com 可以访问*.ziyang.com:匹配上了正则的可以访问www.ziyang.org.cn/nginx/:该页面发起的请求可以访问~.google.:google 前后都是正则匹配下面就实际看下响应:referer 模块是一种简单的防盗链手段,必须依赖浏览器发起请求才会有效,如果攻击者伪造 referer 头部的话,这种方式就失效了。secure_link 模块是另外一种解决的方案。它的主要原理是,通过验证 URL 中哈希值的方式防盗链。基本过程是这个样子的:由服务器(可以是 Nginx,也可以是其他 Web 服务器)生成加密的安全链接 URL,返回给客户端客户端使用安全 URL 访问 Nginx,由 Nginx 的 secure_link 变量验证是否通过原理如下:哈希算法是不可逆的客户端只能拿到执行过哈希算法的 URL仅生成 URL 的服务器,验证 URL 是否安全的 Nginx,这两者才保存原始的字符串原始字符串通常由以下部分有序组成:资源位置。如 HTTP 中指定资源的 URI,防止攻击者拿到一个安全 URI 后可以访问任意资源用户信息。如用户的 IP 地址,限制其他用户盗用 URL时间戳。使安全 URL 及时过期密钥。仅服务器端拥有,增加攻击者猜测出原始字符串的难度模块:ngx_http_secure_link_module未编译进 Nginx,需要通过 –with-http_secure_link_module 添加变量secure_linksecure_link_expiressecure_link值为空字符串:验证不通过值为 0:URL 过期值为 1:验证通过secure_link_expires时间戳的值生成 md5构造请求 URLsecure_link $arg_md5,$arg_expires;secure_link 后面必须跟两个值,一个是参数中的 md5,一个是时间戳secure_link_md5 “$secure_link_expires$uri$remote_addr secret”;按照什么样的顺序构造原始字符串下面是一个实际的配置文件,我这里就不做演示了,感兴趣的可以自己做下实验。除了上面这种相对复杂的方式防盗链,还有一种相对简单的防盗链方式,就是只对 URI 进行哈希,这样当 URI 传原请求link生成的安全请求/prefix/md5/link生成 md5echo -n 'linksecret' | openssl md5 –hex
secure_link_secret secret;
这个防盗链的方法比较简单,那么具体是怎么用呢?大家都在网上下载过资源对吧,不管是电子书还是软件,很多网站你点击下载的时候往往会弹出另外一个页面去下载,这个新的页面其实就是请求的 Nginx 生成的安全 URL。如果这个 URL 被拿到的话,其实还是可以用的,所以需要经常的更新密钥来确保 URL 不会被盗用。到此,关于“Nginx如何防盗链”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注云编程开发博客网站,小编会继续努力为大家带来更多实用的文章!
对于HTTP响应报文,比较重要的信息主要有两部分,一部分是响应行中的状态码,另一部分是响应头。下面分别介绍。响应头信息中比较重要的部分:状态码都是由三位数字组成,主要分为5个大类:状态码共有50多个,其中比较常见的有:大多数的网站扫描工具其基本工作原理都是基于…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。