防盗链的实现方法

nginx防盗链配置

location ~.*\.(gif|jpg|png|flv|swf|rar|zip)${
    valid referers none blocked test.com *.test.com;
    if ($invalid_referer)
    {
        #return 403;
        rewrite ^/ http://www.test.com/403.jpg;
    }
}

传统防盗链遇到的问题(伪造Referer)

可以使用加密签名解决

location ~.*\.(gif|jpg|png|flv|swf|rar|zip)${
    accesskey on;
    accesskey_hashmethod md5;
    accesskey_arg sign;
    accesskey_signature "jason$remote_addr";
    expires    30d;
}
<?php
$sign = md5('jason'.$_SERVER['REMOTE_ADDR]);
echo '<img src="./logo_new.png?sign='. $sign.'">';
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 1

发散一下,nginx有个internal语法。可以让指定location必须被重定向访问。

比如视频播放场景:

location /videos {
     internal; # <---
     root /data/videos;
}

当访问:http://domain/videos/test.mp4无法直接访问。

正确的访问方法是:访问到某个api接口,然后接口返回X-Accel-Redirect 如PHP:

// test.php
Header("X-Accel-Redirect: /video/test.mp4");

访问 /test.php 则实际访问的是 /videos/test.mp4.

由此,可以在php里实现复杂的认证逻辑比如播放次数、ip、登录权限、用户身份等等。

2年前 评论

发散一下,nginx有个internal语法。可以让指定location必须被重定向访问。

比如视频播放场景:

location /videos {
     internal; # <---
     root /data/videos;
}

当访问:http://domain/videos/test.mp4无法直接访问。

正确的访问方法是:访问到某个api接口,然后接口返回X-Accel-Redirect 如PHP:

// test.php
Header("X-Accel-Redirect: /video/test.mp4");

访问 /test.php 则实际访问的是 /videos/test.mp4.

由此,可以在php里实现复杂的认证逻辑比如播放次数、ip、登录权限、用户身份等等。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!