Web 服务端如何实现禁用视频下载 All In One
Web 服务端如何实现禁用视频下载 All In One
difficulty:
Medium
/ 难度:中等
破解微信公众号
禁用视频下载
❓
- 破解 HTML5 video
controlslist="nodownload"
, 禁用controls
显示下载选项 ✅
// 开发者工具 定位 DOM 节点 body, 右键存储为全局变量 temp
// 动态插入 HTML 字符串(修正后的)
temp.insertAdjacentHTML(`beforeend`, `<video src="https://mpvideo.qpic.cn/0bc3buacaaaaoeao2nbjnftfadodeagqaiaa.f10002.mp4?dis_k=b99f5a70d922f3c0ad790806e4493429&dis_t=1719720823&play_scene=10120&auth_info=d9qL3b9UEn5IwuHR2GsxGU0OGiMjN1NlSRMmXXIxfU5MZyhPaWYodR05DzFCD3IgQhpM&auth_key=d18de2a426308feab5f87263c068c1b9&vid=wxv_3429654558707007491&format_id=10002&support_redirect=0&mmversion=false" crossorigin="anonymous" controls></video>`)
temp.insertAdjacentHTML(`beforeend`, `<video src="https://mpvideo.qpic.cn/0bc3buacaaaaoeao2nbjnftfadodeagqaiaa.f10002.mp4?dis_k=b99f5a70d922f3c0ad790806e4493429&dis_t=1719720823&play_scene=10120&auth_info=d9qL3b9UEn5IwuHR2GsxGU0OGiMjN1NlSRMmXXIxfU5MZyhPaWYodR05DzFCD3IgQhpM&auth_key=d18de2a426308feab5f87263c068c1b9" crossorigin="anonymous" controls></video>`)
- 点击下载视频时候,服务端会自动返回 .txt 错误文件, 导致下载失败 ❌ (❓待破解)
https://mp.weixin.qq.com/s/MrT7EWxwJ5JWEzPB90wShg#:~:text=01%3A18-,视频时长,-:1分18
demos
(🐞 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 https://www.cnblogs.com/xgqfrms/ 查看原创文章!
Node.js 如何在服务端
实现禁用视频下载
功能
原理分析:
服务端识别出客户端的下载请求
服务端返回错误文件类型,导致下载资源找不到,从而导致下载失败
疑问:
如何实现可以正常播放视频,但无法下载视频
- 流媒体,授权 token
- 禁用 非授权 iframe 和 批量下载
微信公众号
,点击下载视频时候,服务端会自动返回 .txt 错误文件, 导致下载失败
❌
Content-Disposition
Node.js 服务器控制浏览器
下载文件
还是预览文件
"use strict";
/**
*
* @author xgqfrms
* @license MIT
* @copyright xgqfrms
* @created 2022-04-17
* @modified
*
* @description
* @augments
* @example
* @link
* @solutions
*
*
*/
var fs = require('fs');
var path = require("path");
var express = require("express");
var app = express();
const log = console.log;
app.get("/", function(req,res) {
var filename = 'logo.png';
var filepath = path.join(__dirname, `./${filename}`);
// console.log('__dirname', __dirname);
// console.log('dir', dir);
// ReferenceError: dir is not defined
const dir = '/Users/xgqfrms-mbp/Documents/GitHub/learn-typescript-by-practice/000-xyz/download-preview/'
console.log('filepath', filepath.replace(dir, ''));
fs.readFile(filepath, function(err, data){
res.set({
'Content-Type': 'application/octet-stream',
// 告诉浏览器这是一个二进制文件,浏览器不需要执行该文件,直接作为附件弹出下载对话框即可 ✅
'Content-Disposition': `attachment; filename=${filename}`,
// 告诉浏览器这是一个附件要下载是png图片
});
console.log('data =', data);
res.end(data);
});
});
app.get("/cdn", function(req,res) {
// node.js render remote url file
// cdn url ???
const url = `https://cdn.xgqfrms.xyz/logo/icon.png`;
var filename = 'logo.png';
var filepath = path.join(__dirname, `./${filename}`);
// log('__dirname', __dirname);
fs.readFile(filepath, function(err, data){
res.set({
'Content-Type': 'application/octet-stream',
// 告诉浏览器这是一个二进制文件,浏览器不需要执行该文件,直接作为附件弹出下载对话框即可 ✅
'Content-Disposition': `attachment; filename=${filename}`,
// 告诉浏览器这是一个附件要下载是png图片
});
console.log('data =', data);
res.end(data);
});
});
const port = 3000;
app.listen(port, function(){
console.log(`server is running: http://localhost:${port}`);
});
https://www.cnblogs.com/xgqfrms/p/17533694.html
https://www.cnblogs.com/xgqfrms/p/16155131.html
refs
https://www.cnblogs.com/xgqfrms/p/16371270.html
https://www.cnblogs.com/xgqfrms/p/18276259
©xgqfrms 2012-2021
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!
本文首发于博客园,作者:xgqfrms,原文链接:https://www.cnblogs.com/xgqfrms/p/18279806
未经授权禁止转载,违者必究!