如何让视频在特定的网站上播放/禁止播放?(常见的视频防盗链技术之一)

一、需求背景

在各行各业中,不论是教育、贸易还是医疗领域,视频内容都存在被盗用的风险。为加强视频安全性,我们可以采取特殊设置措施,例如限制视频仅在高安全性网站播放,或屏蔽高风险网站。那么,具体有哪些方法可以有效保护视频安全呢?

二、需求解决

通过OVP防盗链技术实现指定网站播放,俗称域名黑白名单。设置网站A白名单,则只允许视频在A网站下播放;设置网站B黑名单,则禁止视频在B网站下播放,可有效防止用户原创视频资源被非法盗用。

什么是OVP防盗链?

OVP防盗链是一种用于在线视频平台(Online Video Platform,简称OVP)的技术手段,旨在防止未经授权的第三方网站直接链接或嵌入平台上的视频资源,从而保护内容版权、节省服务器带宽,并确保只有合法用户才能访问资源。

工作原理:

OVP防盗链主要通过服务器端验证来实现,常见方法包括:

Referer检查: 当用户请求视频资源时,服务器检查HTTP请求头中的Referer字段(表示请求来源的URL)。如果Referer不在白名单(如平台域名),则拒绝访问。
例如:如果请求来自example.com,但白名单只包含ovp-platform.com,服务器返回403错误。
Token验证: 更安全的方式是生成动态令牌(Token)。平台在生成视频URL时,添加一个基于时间、用户IP或密钥计算的加密Token。服务器在每次请求时验证Token的有效性。
Token生成可能使用哈希算法,如HMAC-SHA256,公式可表示为: Token = H ( 密钥 ∥ 时间戳 ∥ 资源ID ) \text{Token} = H(\text{密钥} \parallel \text{时间戳} \parallel \text{资源ID}) Token=H(密钥时间戳资源ID) 其中 H H H是哈希函数, ∥ \parallel 表示字符串连接。

三、技术实现

Java源代码:通过HTTP请求头中的Referer字段判断来源网站

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class VideoAuthFilter implements Filter {
    // 白名单域名列表(允许访问的网站)
    private List<String> whiteList = Arrays.asList("https://www.a.com", "https://a.com");
    // 黑名单域名列表(禁止访问的网站)
    private List<String> blackList = Arrays.asList("https://www.b.com", "https://b.com");

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
            throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest) request;
        HttpServletResponse httpResponse = (HttpServletResponse) response;

        // 获取请求来源的Referer
        String referer = httpRequest.getHeader("Referer");

        // 无Referer时拒绝访问(可根据需求调整)
        if (referer == null) {
            httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "Access denied");
            return;
        }

        // 检查黑名单
        for (String blackDomain : blackList) {
            if (referer.startsWith(blackDomain)) {
                httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "Blacklisted domain");
                return;
            }
        }

        // 检查白名单(若白名单非空则启用)
        if (!whiteList.isEmpty()) {
            boolean allowed = false;
            for (String whiteDomain : whiteList) {
                if (referer.startsWith(whiteDomain)) {
                    allowed = true;
                    break;
                }
            }
            if (!allowed) {
                httpResponse.sendError(HttpServletResponse.SC_FORBIDDEN, "Not in whitelist");
                return;
            }
        }

        // 通过校验,继续执行
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig filterConfig) {
        // 初始化时可从配置文件读取名单
    }

    @Override
    public void destroy() {
        // 清理资源
    }
}
 

python源码:过Flask框架实现白名单和黑名单功能,控制视频只能在指定域名下播放

from flask import Flask, request, send_file, abort

app = Flask(__name__)

# 配置白名单和黑名单域名(需包含协议如http/https)
WHITE_LIST = ['https://websiteA.com']
BLACK_LIST = ['https://websiteB.com']

@app.route('/video/')
def serve_video(filename):
    referer = request.headers.get('Referer')
    
    # 白名单模式:仅允许特定域名访问
    if WHITE_LIST:
        if not referer or not any(domain in referer for domain in WHITE_LIST):
            abort(403)
    
    # 黑名单模式:禁止特定域名访问
    if BLACK_LIST:
        if referer and any(domain in referer for domain in BLACK_LIST):
            abort(403)
    
    # 返回视频文件(实际使用需替换为真实路径)
    return send_file(f'videos/{filename}')

if __name__ == '__main__':
    app.run(debug=True)
 

polyv实现

四、总结

基于polyv实现的OVP防盗链,能够帮助您的教育视频,贸易视频,医疗视频等机密视频进行视频加密,更加保障了视频的安全性,维护自己的权益和降低维护风险的成本。
希望我的建议对您有用,有用的话麻烦点一个赞吧!

你可能感兴趣的:(教育视频,polyv,视频安全,音视频,python,java,同态加密)