作者回复: secure_link通常锁住以下资源:1、对象,也就是url;2、时间,限制一个token的有效期;3、密钥,只要攻击者不知道密钥就不能伪造新的URL。
所以,作为反向代理即使拿到了url,但这个URL只能访问资源A,并不能访问资源B,而且还有时效性。
作者回复: nginx不需要知道如何分割,它只需要知道如何拼接即可,因为hash不可逆!Nginx能从URI中取出test1.txt,也能从location中找到mysecret2,接着拼接好字符串再hash出值,比对即可
作者回复: ^可以匹配上任何url,而且当前场景也不需要从url中取出一些分组的值,故如此使用。
作者回复: 视频中我只演示了哈希不匹配导致的链接失效,虽然我改的是时间戳,但md5参数我没改,所以哈希后不匹配导致失败,返回403.
那个时间戳表示的是绝对的过期时间,如果我把时间改为系统当前时间之前,md5也随之改动,那么md5虽然匹配上了,但参数中的时间戳小于当前时间,就会返回410.
所以,想改变失效时间,应该在生成URL(主要是时间戳和md5)上做变更。
作者回复: A服务器负责给出安全链接,它通过API或者HTML等方式给到浏览器;浏览器访问安全链接要到B服务器,也就是本节介绍的Nginx
作者回复: 第1次访问用来获取下载uri的页面,这样的页面通常是要做cookie鉴权的,爬虫不做登录通常获取不到下载uri
作者回复: 是的,这是两种不同的模式,详见http://nginx.org/en/docs/http/ngx_http_secure_link_module.html
作者回复: 因为nginx拥有原始hash,也有生成原始哈希所需要的值(在url中),包括配置文件中的密钥。所以再次生成哈希并比较即可
作者回复: 1、是的;
2、影响非常小。
作者回复: 是的,直接内部跳转到location /secure/中了
作者回复: 没错!
作者回复: 是的,所以它依赖于下载页面,这个页面中的下载URL都是通过这个规则生成的。这个模块一定要配合应用服务一起工作的。