云服务器的CDN域名的远程鉴权配置,基于 Python
实战场景
在项目实战中,会碰到一种特定的运维场景,对CDN访问进行限制,一般手段是开启 referer 防盗链,开启 IP黑白名单,开启UA黑白名单,本篇博客为大家展示的是通过我们自己的服务器,然后实现远程鉴权,进行更加细致的权限判定。
实现目标:
- 请求CDN资源调用我们的鉴权服务器
- 鉴权服务器获取请求信息,并保存到日志中
- 分别返回鉴权成功,鉴权失败
开启远程鉴权
在远程鉴权页面打开【开关】之后,出现如下配置界面,这里相关细节描述如下:
鉴权服务器地址
:我们自己的服务器,地址可访问,可以是域名也可以是IP地址;请求方法
:支持 GET,POST,HEAD 三种请求;鉴权文件类型
:多个文件类型用|
分隔,例如mp4|flv
;保留参数设置
:控制用户请求 URL 中需要鉴权的参数,用|
分隔;自定义参数
:可以自定义参数,可以使用CDN控制台预设的变量,多个参数用|
分隔,例如token=$arg_token|vendor=ali_cdn
;保留请求头设置
:控制用户请求头中需要鉴权的参数,可以保留所有参数,也可以保留指定参数;添加自定义参数
:给请求头添加自定义参数;鉴权状态码
:成功200,失败 403;鉴权超时时长
:单位为毫秒,最长时长可以设置为3000;
参考上述说明配置完毕,得到如下界面,本案例中仅限制了 m3u8
类型的文件,后续我们根据实际情况进行修改。
开启该配置之后,再次访问静态资源,就会出现 403 Forbidden
这里需要注意,由于测试的是 m3u8 文件,所以访问该文件的时候,如果没有被禁止,会自动下载。
Python 端权限验证
以下代码基于 Flask 编写,主要将POST请求数据和Header请求头保存到文件中。
日志文件,我们使用 logging 模块写入到 new.log
文件中。
# 导入Flask类
from flask import Flask
from flask import request
from flask import render_template
import logging
import requests
import time
import random
import base64logging.basicConfig(level=logging.DEBUG,filename='./new.log',filemode='a',format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s')
# 实例化,可视为固定格式
app = Flask(__name__)@app.route('/auth', methods=['GET', 'POST','HEAD'])
def auth():if request.method == 'GET':args = request.argsreturn "hello"if request.method == 'HEAD':print("HEAD请求")arges = request.formprint("参数")logging.info(arges)print(request)print("请求头")headers = request.headersprint(headers)logging.info(headers)print("请求数据")logging.info(request.data)return "login success", 200 # 403if request.method == "POST":print("POST请求")arges = request.formprint(request)headers = request.headersprint("参数")logging.info(arges)print("请求头")logging.info(headers)print("请求数据")logging.info(request.data)return "login success", 200 # 403if __name__ == '__main__':# app.run(host, port, debug, options)# 默认值:host="127.0.0.1", port=5000, debug=Falseapp.run(host="0.0.0.0", port=5000)
此时,当你再次访问CDN资源时,会自动回调你的服务器进行鉴权操作,上述代码请求成功之后,返回状态码为 200,接下来CDN资源可以访问,如果返回403,表示被禁用。
验证逻辑
服务端验证可以基于 referer + ua + ip 进行验证,为了保证效率,可以使用 redis 缓存数据库进行配置。
记录时间
2022年度 Flag,写作的 586 / 1024 篇。
可以关注我,点赞我、评论我、收藏我啦。
更多精彩
- Python 爬虫 100 例教程导航帖(连续 3 年,不断更!)
- Python爬虫120 (39.9 元,保 5 年更新)
云服务器的CDN域名的远程鉴权配置,基于 Python相关推荐
- 腾讯云服务器和cdn,腾讯云服务器开启CDN及CDN开启HTTPS详细配置教程
买了腾讯云的双十一机子,随后备案回国,毕竟机子带宽相较于国外动不动百兆来说不是很高,只有5M,很容易就能跑满.基于腾讯云每个月赠送了60G的流量,就想到何不把这60G流量用起来,将网站从原来的llss ...
- (百度云服务器的)域名不加www可以访问,添加就不能访问 (添加域名绑定)- 解决篇
域名不加www可以访问,添加就不能访问: 解决这个问题,就是添加" 域名绑定 ". 403报错截图:(添加www的) 分析:是因为没有添加绑定对应的 · 域名解析规则导致的. 解决 ...
- 阿里云服务器ECS与域名的绑定
本文简单的介绍下阿里云的虚拟服务器ECS与域名绑定 条件:阿里云服务器+已实名认证域名 域名解析 1进入阿里云管理控制台 --云解析DNS,选择需要解析的域名--解析 2添加两条解析,打码的地方添自己 ...
- 关于阿里云服务器ECS与域名的绑定详细过程介绍
本文简单的介绍下阿里云的虚拟服务器ECS与域名绑定 条件:阿里云服务器+已实名认证域名 域名解析 1进入阿里云管理控制台 --云解析DNS,选择需要解析的域名--解析 2添加两条解析,打码的地方添自己 ...
- 【阿里云服务器Ubuntu数据库MongoDB设置远程链接】
阿里云服务器Ubuntu数据库MongoDB设置远程链接 配置mongodb.conf文件 阿里云服务器开放端口 远程链接测试 紧跟上一篇,进行MongoDB数据库的远程链接配置,并使用本地机器进行链 ...
- 腾讯云服务器性能评测:8核 16G 18M 配置
腾讯云轻量应用服务器8核16G18M配置优惠价1668元15个月,免费送3个月续费,折合每月111元,18M公网带宽下载速度峰值可达2304KB/秒,即2.218M/s,系统盘为270GB SSD盘, ...
- RTSP向ZLM流媒体服务器的推流和拉流鉴权
文章目录 前言 一.HTTP Hook 二.向ZLM推流鉴权 三.向ZLM拉流 四.参考 前言 本篇博客的测试环境: Windows 10 + Qt 5.12.2 MSVC. 由于项目中使用了RTSP ...
- js如何获取jwt信息_学习后端鉴权系列: 基于JWT的会话管理
内容回顾 上一节讲了基于Cookie+Session的认证方案. Even:学习后端鉴权系列: 基于Cookie, Session认证zhuanlan.zhihu.com 由于基于Session方案 ...
- js获取session_学习后端鉴权系列: 基于Cookie, Session认证
说起鉴权大家应该都很熟悉, 不过作为前端开发来讲, 鉴权的流程大头都在后端小哥那边, 但是作为一个有志气的开发者肯定要好好学习整个鉴权流程以及方案, 不然怎么跟后端合作. 常见的鉴权方案 基于Cook ...
最新文章
- [转载] 对称加密与非对称加密
- eclipse中设置python的版本
- 华为轮值主席鸿蒙,鸿蒙2.0已开源 华为轮值董事长:今年至少3亿设备搭载鸿蒙系统...
- 断言(assert)详解
- 学习手机游戏原画设计需要多长时间?难学吗?
- java jdbc连接derby,通过JDBC连接到Derby数据库失败
- NSAssert和NSParameterAssert
- PAT(乙级) 1001 害死人不偿命的(3n+1)猜想 C++
- Leetcode 1218.最长定差子序列
- 牛顿法求解方程的根(C语言)
- 智能车竞赛技术报告 | 智能车视觉 - 西北工业大学 - 赤霄2021
- 开源WebMail客户端Intouch2.2beta导致IE6崩溃的原因和修改方法
- Map2Shp地理格式转换器——专业mapgis格式无损批量转换工具_map2shp_新浪博客
- 用MSYS2编译diction程序
- jscript php,PHP, JScript和VBScript函数和类的语法
- 阿姆斯特朗数——————还记得大明湖畔的水仙花么(笑)
- “最难就业季“中的大学生就业:本硕过半有着落 高职生成香饽饽
- hadoop3访问hdfs web控制页面遇到的各种问题总结
- (pywin32)解决keybd_event在游戏中失效
- Win7桌面显示音乐波动 - 音频频谱分析仪