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
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-2025
www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!
原创文章,版权所有©️xgqfrms, 禁止转载 🈲️,侵权必究⚠️!
本文首发于博客园,作者:xgqfrms,原文链接:https://www.cnblogs.com/xgqfrms/p/18279806
未经授权禁止转载,违者必究!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
2022-07-02 今日待办清单 App All In One
2022-07-02 Mac 外接机械键盘 Win 键坏了 ❌, 无法使用 vscode 向上/向下复制一行快捷键 ❌ All In One
2021-07-02 5 分钟搞定 OKR 工作法 All In One
2021-07-02 微前端最佳实践 All In One
2021-07-02 script & type="text/typescript" All In One
2020-07-02 css infinite loop animation
2020-07-02 auto embedded component in an online code editor