如何让Python脚本在指定时间后过期或无法访问?
实现Python脚本的过期限制方案
当然需要在脚本里加校验逻辑,下面给几个不同强度的实现方案,根据你的需求选:
基础时间校验(简单易实现,适合非敏感场景)
直接在脚本最开头加一段时间校验代码,到了指定时间就终止运行。这种方式的缺点是懂点Python的人能直接改脚本里的过期时间或者系统时间绕过,但胜在零依赖、好写。
import datetime import sys # 设置过期时间,格式是年-月-日 时:分:秒 EXPIRE_DATE = datetime.datetime(2024, 12, 31, 23, 59, 59) current_time = datetime.datetime.now() if current_time > EXPIRE_DATE: print("脚本已过期,无法继续运行") sys.exit(1) # 下面写你的脚本核心逻辑 print("脚本正常运行中...")
加密过期时间(防直接篡改)
把过期时间加密后存在脚本里,校验时解密再对比,能挡住大部分小白篡改。用Python标准库就能实现,不需要额外装包:
import datetime import sys # 用简单的异或加密过期时间(密钥自己随便设,别和别人说) def xor_encrypt_decrypt(text, key): return ''.join(chr(ord(c) ^ key) for c in text) # 先运行一次生成加密后的过期时间,替换下面的ENCRYPTED_EXPIRE # 比如原始时间是"2024-12-31 23:59:59",密钥设为123 # 生成后把结果存在ENCRYPTED_EXPIRE里,然后删掉生成加密值的代码 ENCRYPTED_EXPIRE = "35;>?89:69<=>9:69<=>" # 示例加密值 KEY = 123 # 解密并转换为时间对象 try: expire_str = xor_encrypt_decrypt(ENCRYPTED_EXPIRE, KEY) EXPIRE_DATE = datetime.datetime.strptime(expire_str, "%Y-%m-%d %H:%M:%S") except: print("脚本校验失败,无法运行") sys.exit(1) current_time = datetime.datetime.now() if current_time > EXPIRE_DATE: print("脚本已过期,无法继续运行") sys.exit(1) # 核心逻辑开始 print("脚本正常运行中...")
网络时间校验(防改系统时间)
如果担心用户改本地系统时间绕过,可以调用网络时间接口(需要先装pip install ntplib),但依赖网络,且如果网络不通或者接口失效会影响脚本运行:
import datetime import sys import ntplib EXPIRE_DATE = datetime.datetime(2024, 12, 31, 23, 59, 59) try: # 调用NTP服务器获取网络时间 client = ntplib.NTPClient() response = client.request('pool.ntp.org') network_time = datetime.datetime.fromtimestamp(response.tx_time) except Exception as e: print("无法获取网络时间,脚本终止运行") sys.exit(1) if network_time > EXPIRE_DATE: print("脚本已过期,无法继续运行") sys.exit(1) # 核心逻辑 print("脚本正常运行中...")
注意事项
- 没有绝对安全的本地过期方案,只要是本地运行的脚本,技术足够的人总能绕过,上面的方案只是提高篡改门槛
- 如果是商业敏感脚本,建议把核心逻辑放到服务器端,本地只做调用,这样能更好控制访问权限
内容的提问来源于stack exchange,提问作者Pertigaan
相关产品推荐
相关产品推荐

