授权相关:如何用密码或其他认证方式保护Python代码?
代码授权与保护方案构想
需求背景
我正在开发一款小型实用工具,既要对外共享给第三方,内部也会使用。雇主要求通过防止未授权使用来“掌控”这款应用,具体要求如下:
- 采用密码认证:向使用者分发密码,通过GUI输入完成认证,不能在客户端硬编码密码校验逻辑,避免使用者直接修改代码跳过校验。
- 主应用代码需避免被使用者轻易获取,且不想使用代码混淆或编译的方式增加逆向难度。
我的思路是:让客户端启动时连接运行Flask API的远程服务器,校验用户输入的密码;若密码有效,服务器返回可执行的代码指令给客户端运行。我清楚执行远程代码的风险,但对此不在意。
构想的实现方案
远程服务器端Flask API
from flask import Flask, request # 补充原代码遗漏的request导入 PASSWORD = 'demo' # 也可以读取本地脚本文件内容作为字符串返回 def secret_script_code(): codestring = """ import math x = 1 y = 5 def try_this(x, y): return math.sqrt((y-x)) if __name__ == "__main__": result = try_this(x, y) print(f"执行结果:{result}") """ return codestring app = Flask(__name__) @app.route('/', methods = ['GET','POST']) def index(): if request.method == 'POST': # 读取请求中的密码,避免空值报错 password = request.form.get('password', '') if password == PASSWORD: # 返回Python脚本字符串供客户端执行 return secret_script_code() # GET请求或密码无效时返回提示代码 return "print('Invalid password!')" if __name__ == '__main__': app.run(host='0.0.0.0', debug=False) # 生产环境建议关闭debug并绑定公网可访问地址
客户端应用
import requests def run_program(): # 实际场景替换为GUI输入密码逻辑,示例用控制台输入模拟 user_password = input("请输入授权密码:") payload = {'password': user_password} # 替换为实际的服务器公网地址 r = requests.post("https://xxx.xx.xx.x/", data=payload) # 执行服务器返回的代码 exec(r.text) if __name__ == "__main__": run_program()
疑问与优化方向
我知道如果使用者想要查看“机密代码”,只需添加print(r.text)就能输出exec执行的字符串。考虑将代码字符串编译为字节码后再发送,是否能提升安全性?
我明白所有代码都可被反编译,对于有逆向动机的人来说没有绝对的防护,但目标场景中没人会花时间做这件事。我们的核心需求是防止应用被轻易复制、管控使用权限。
内容的提问来源于stack exchange,提问作者unbutu
相关产品推荐
相关产品推荐

