当 运行 带有 uWSGI 的 Flask 应用程序时,我如何保护我的源代码?

How can I protect my source code when running a Flask application with uWSGI?

我有一个使用 uWSGI 运行 的 Flask 应用程序。我的客户可以访问应用 运行s.

所在的服务器

如何保护或隐藏我的源代码?

编辑:我发现您可以通过 building it from source 在 uWSGI 中嵌入一个应用程序,但这似乎有些牵强。

是的 - 如果有人非常想要它,那么真正保护您的算法的唯一方法就是不要分发它们。但是,现实是代码无论如何都很难理解。通常,仅仅不记录代码就足以让人气馁。但是,有一些技术,您的努力因它们的安全程度而异。我想到的一些方法是。

  • 编译为字节码:我看到它是在野外完成的,有一家公司为 Linux / Outlook 制作了一个 Python 电子邮件客户端。我记得它是通过编译分发进行混淆的。您必须研究合适的工具。

  • 混淆 per-script 级别:查看 pyminifier 工具。它可以使您的脚本几乎无法阅读(但可以通过合理的努力来逆转)

  • 使用高级混淆器:查看 pyarmor。它要复杂得多,也更难实施——但看起来它可以完成工作。

  • 开源吧。似乎违反直觉——但算法很少是代码中最有价值的方面。拥有理解和维护它的技能、时间和资源是。很可能有人看到你的代码并不重要。如果您为客户提供良好的服务,他们通常有比使用您的代码库更好的事情要做。有很多企业公司靠开源软件谋生(例如 Startburst,第二象限。)

(使用 pyminifier 混淆的示例代码)

import argparse
ۻﲮᆖﻆ=range
ۻﲮᆖﻆ枇=int
ۻﲮᆖﻆ=print
ۻﲮᆖﻆﶾ=argparse.ArgumentParser
import sys
ۻﲮᆖﻆ=sys.argv
ۻﲮᆖﻆ=sys.stdout
import logging
ۻﲮᆖﻆ닸=logging.basicConfig
ۻﲮᆖﻆ=logging.DEBUG
ۻﲮᆖﻆ柚=logging.INFO
ۻﲮᆖﻆ䔎=logging.getLogger
from demo import __version__
__author__="Steve Jackson"
__copyright__="Steve Jackson"
__license__="mit"
ۻﲮᆖﻆ=ۻﲮᆖﻆ䔎(__name__)
def ۻﲮᆖﻆ(n):
 assert n>0
 ۻﲮᆖﻆ関,ۻﲮᆖﻆ=1,1
 for i in ۻﲮᆖﻆ(n-1):
  ۻﲮᆖﻆ関,ۻﲮᆖﻆ=ۻﲮᆖﻆ,ۻﲮᆖﻆ関+ۻﲮᆖﻆ
 return ۻﲮᆖﻆ関
def ۻﲮᆖﻆ(ۻﲮᆖﻆ):
 ۻﲮᆖﻆݻ=ۻﲮᆖﻆﶾ(description="Just a Fibonacci demonstration")
 ۻﲮᆖﻆݻ.add_argument("--version",action="version",version="demo-day {ver}".format(ver=__version__))
 ۻﲮᆖﻆݻ.add_argument(dest="n",help="n-th Fibonacci number",type=ۻﲮᆖﻆ枇,metavar="INT")
 ۻﲮᆖﻆݻ.add_argument("-v","--verbose",dest="loglevel",help="set loglevel to INFO",action="store_const",const=ۻﲮᆖﻆ柚)
 ۻﲮᆖﻆݻ.add_argument("-vv","--very-verbose",dest="loglevel",help="set loglevel to DEBUG",action="store_const",const=ۻﲮᆖﻆ)
 return ۻﲮᆖﻆݻ.ۻﲮᆖﻆ(ۻﲮᆖﻆ)
def ۻﲮᆖﻆ(loglevel):
 ۻﲮᆖﻆ="[%(asctime)s] %(levelname)s:%(name)s:%(message)s"
 ۻﲮᆖﻆ닸(level=loglevel,stream=ۻﲮᆖﻆ,format=ۻﲮᆖﻆ,datefmt="%Y-%m-%d %H:%M:%S")
def ۻﲮᆖﻆﯜ(ۻﲮᆖﻆ):
 ۻﲮᆖﻆ=ۻﲮᆖﻆ(ۻﲮᆖﻆ)
 ۻﲮᆖﻆ(ۻﲮᆖﻆ.loglevel)
 ۻﲮᆖﻆ.debug("Starting crazy calculations...")
 ۻﲮᆖﻆ("The {}-th Fibonacci number is {}".format(ۻﲮᆖﻆ.n,ۻﲮᆖﻆ(ۻﲮᆖﻆ.n)))
 ۻﲮᆖﻆ.info("Script ends here")
def ۻﲮᆖﻆܪ():
 ۻﲮᆖﻆﯜ(ۻﲮᆖﻆ[1:])
if __name__=="__main__":
 ۻﲮᆖﻆܪ()
# Created by pyminifier (https://github.com/liftoff/pyminifier)