编程技术分享平台

网站首页 > 技术教程 正文

Nginx更高级的防盗链解决方案(nginx防盗链 referer)

xnh888 2024-10-17 17:06:23 技术教程 42 ℃ 0 评论

上一篇文章我们介绍了Nginx用referer模块来做防盗链

但是攻击者可以伪造header,来进行盗链。这个成本其实还是比较低的。

今天我来看一个更牛的防盗链的解决方案-- secure-link。

ngx_http_secure_link_module:默认是不编译进nginx的,如有需要可以通过--with-http_secure_link_module来添加。




防盗链的过程。

1. 我们所展示出来的url 链接并不是直接把资源文件名,目录暴露出来,而是进行一定加密展示在客户端上。

2. 当客户端请求我们的加密url时,Nginx中的secure_link变量会判断是true false来决定是否通过验证。


主要实现原理是:

  1. 我们可以认为hash算法是不可逆的。
  2. 客户端只能拿到经过hash后的url。
  3. 只有生成hash后url的服务器和验证url的Nginx才能保存hash算法前的原始字符串。
  4. 原始字符串通常需要保存以下部分,

具体资源的位置,以防止拿到一个安全的url就可以访问其他的资源。

用户的信息,如:IP地址,用户名等,某一个用户可访问不代表其他用户也可以访问。

时间戳:使用安全URL及时过期。

密钥,仅服务端拥有,提高攻击者猜测出原始字符串的成本。


如果没有同时包含以上部分,仍然是可用的,但是安全性会降低。


相关变量:

secure_link:有3个值,空字符串:验证没通过。0:url过期。1:通过验证。

secure_link_expires:时间戳的值。

相关语法:

Syntax: secure_link expression;
Default: —
Context: http, server, location

Syntax: secure_link_md5 expression;
Default: —
Context: http, server, location

Syntax: secure_link_secret word;
Default: —
Context: location


本文仅供学习分享。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表