推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
goodloop
V2EX  ›  Python

一般 Python 服务部署在公有云服务器上,如何做代码保护?

  •  
  •   goodloop · Nov 6, 2017 · 12698 views
    This topic created in 3287 days ago, the information mentioned may be changed or developed.
    如果想部署一个 flask 的应用。是直接上项目代码,在 virtualenv 里执行?有没有什么防止代码泄露的方法?
    61 replies  •  2017-11-11 13:12:06 +08:00
    jmc891205
    jmc891205
    Nov 6, 2017
    1
    是怕公有云服务商拿走你的代码?
    Hstar
    Hstar
    Nov 6, 2017
    2
    没有.exe
    yuhr123
    yuhr123
    Nov 6, 2017❤️1
    3
    你真的认为云服务商会看的上你用 flask 框架写的代码?

    如果答案是肯定的,那么恭喜你即将成为下一个独角兽。

    如果答案是否定的,那么恭喜你,创建 virtualenv 环境放心的跑你的代码吧。
    jko123
    jko123
    Nov 6, 2017 via Android
    4
    哈哈哈,你的代码那么牛逼的话,你还不自建机房?
    wibile
    wibile
    Nov 6, 2017❤️1
    5
    有,可以生成.so 文件,直接运行,互相调用也没影响。cython。
    wellsc
    wellsc
    Nov 6, 2017
    6
    @wibile Cython 不支持 Python 的高级语法的(比如说装饰器,元类啥的),而且转换 Python 代码的模块引用也有问题的
    Hellert
    Hellert
    Nov 6, 2017
    7
    这种情况 Go 就体现出优势来了
    mengzhuo
    mengzhuo
    Nov 6, 2017 via iPhone
    8
    @Hellert Go 一样可以反编译~
    wibile
    wibile
    Nov 6, 2017
    9
    @wellsc 支持,引用没问题呢。需要在 linux 上编译,不影响运行,把 xxx.py 替换为 xxx.so ,其他都不变。
    Kilerd
    Kilerd
    Nov 6, 2017
    10
    wheel
    est
    est
    Nov 6, 2017❤️8
    11
    我跟你们说个邪门的

    等 python 代码跑起来之后,把 .py 删掉即可。

    当然,你们说可以 lsof 在 ln 还原,但是 python 可以远程加载 bytecode 并且执行呀。2333
    wellsc
    wellsc
    Nov 6, 2017
    12
    @wibile 可以,回头我发个 flask 的 gist 片段给你编译试试。我亲测是不可以的
    araraloren
    araraloren
    Nov 6, 2017
    13
    这个时候 perl 的作用就体现出来了吧,我们自带加密 (滑稽
    fiht
    fiht
    Nov 6, 2017
    14
    杞人忧天

    =========
    如果若干年之后有公有云厂商擅自翻用户数据被曝光了请开帖艾特我
    opengps
    opengps
    Nov 6, 2017
    15
    没必要担心这个,就算拿了,等他看懂了用起来,可能数据过时。过时的数据也没意义,公有云自己的业务够忙的,何必对你的代码感兴趣。
    条件是,别选择太小规模的公有云
    mooncakejs
    mooncakejs
    Nov 6, 2017❤️1
    16
    给你全套阿里巴巴代码,你能跑起来算你赢。
    shiny
    shiny
    PRO
    Nov 6, 2017
    17
    要是真到了这地步,把数据拷出来再找人重新做一个不就成了。
    rogwan
    rogwan
    Nov 6, 2017 via Android
    18
    @mooncakejs 哈哈😄找个 py 库,没易读的 readme 和 demo 都懒得跑😅
    awing
    awing
    Nov 6, 2017
    19
    大家都那么忙,谁有功夫研究你的代码
    gouchaoer
    gouchaoer
    Nov 6, 2017 via Android
    20
    主要是防着甲方?
    RubyJack
    RubyJack
    Nov 6, 2017
    21
    我觉得 linux 的权限控制就搞定了
    hard2reg
    hard2reg
    Nov 6, 2017❤️1
    22
    V 站被害妄想症的人起码 90%了
    dzxx36gyy
    dzxx36gyy
    Nov 6, 2017
    23
    公有云一般不搞事吧,最多没事做扫你端口。各种机房托管和租用比较乐于干这种事
    lyragosa
    lyragosa
    Nov 6, 2017
    24
    你怎么不说机房网管直接去机房插个 U 盘把你的数据拷出来呢
    malusama
    malusama
    Nov 6, 2017
    25
    独角兽啊
    ranleng
    ranleng
    Nov 6, 2017
    26
    难道重点不是在于 “有没有什么防止代码泄露的方法?”
    而不是代码质量或者别人偷代码的问题。
    clino
    clino
    Nov 6, 2017 via Android
    27
    @est 万一有些延迟 import 的呢
    patrickwhisper
    patrickwhisper
    Nov 6, 2017
    28
    先用 Docker 包装一层,然后在宿主机的 root 权限回收,关闭 Docker 登陆用户使用的权限。
    zjyExcelsior
    zjyExcelsior
    Nov 6, 2017
    29
    cython 编译
    bfbd
    bfbd
    Nov 6, 2017
    30
    可以编译成 pyc。
    python3 -O -m compileall demo

    https://my.oschina.net/bfbd/blog/864310
    est
    est
    Nov 6, 2017
    31
    @clino 你来个例子我看看?
    clino
    clino
    Nov 6, 2017
    32
    @est 比如在函数里写 import 的,那还没执行过第一次的时候就没 import 过,如果这个模块是自己写的,那删掉不就 import 会失败嘛
    gouchaoer
    gouchaoer
    Nov 6, 2017❤️3
    33
    LS 一群人的观点就有问题,LZ 是来问有没有防止源码泄漏的方案,一群人告诉 LZ 你不需要加密源码,这很奇怪吧
    crab
    crab
    Nov 6, 2017
    34
    @gouchaoer +1。被 1 楼带歪了!
    ngloom
    ngloom
    Nov 6, 2017
    35
    compileall +1
    zoowii
    zoowii
    Nov 6, 2017
    36
    你的数据库比你的代码重要多了
    Osk
    Osk
    Nov 6, 2017 via Android
    37
    对 compileall 编绎整个项目文件夹,加参数把 docstring 等全搞掉,再把.py 删掉,一样能跑,我自己几个小脚本这样玩过没问题。见过一些商用 python 也是一堆 pyc/pyo,入口的 py 文件只是一些引导代码,import pyc 里面的主函数并执行。注意的是编译后的文件和 python 版本相关的,而且实际上听说能反编译
    bingoAI
    bingoAI
    Nov 6, 2017
    38
    编译成包文件。
    goodloop
    goodloop
    OP
    Nov 7, 2017
    39
    多谢各位的方案,我这边主要是一些服务性的代码,不需要存数据库。所以相对来说代码安全性会比较重要一些。

    1. 我原来使用过 pyinstaller 打包应用。但是最近新添加了一个依赖库,pyinstaller 的支持会有问题( so 的依赖问题),
    所以来询问各位的答案。之前做过一些研究,看到基本上集中方案:
    1. cython
    2. 修改 python 的解释器,这个部署比较麻烦
    3. pyinstaller 或者 py2exe

    目前的情况下,看起来 cython 是我想用的可选方案。

    2. 一直依赖做些算法和中间件的事情,没有部署过什么后台服务,所以一直对 python/java 的代码安全性方面比较好奇,所以有此一问。
    fyyz
    fyyz
    Nov 7, 2017
    40
    找实习生重构代码
    enrolls
    enrolls
    Nov 7, 2017
    41
    这 2 点应该会有帮助。
    1. 搜:阴阳师:一个非酋的逆向旅程
    2. 搜:python3-cookbook load_modules_from_remote_machine_by_hooks
    est
    est
    Nov 7, 2017
    42
    @clino 那的确会失败。所以你等几乎所有函数都跑过一次内存热了再删。。。。
    Cooky
    Cooky
    Nov 7, 2017 via Android
    43
    居然没人提 nuitka ?
    flyshu
    flyshu
    Nov 7, 2017
    44
    感觉翻代码还不如翻数据库来得方便快捷
    bearqq
    bearqq
    Nov 7, 2017 via Android
    45
    @Cooky flask 应用他可以,但如何前面再加 gunicorn?
    firefox12
    firefox12
    Nov 7, 2017 via iPhone
    46
    阿里爸爸直接删掉用户可执行程序的事情才过去多久啊?
    ctro15547
    ctro15547
    Nov 7, 2017
    47
    如果只是不想被别人看到*.pyc 咯。或者先混淆一下。只要不是什么惊天的功能,谁管你写的是啥。。
    Cooky
    Cooky
    Nov 7, 2017 via Android
    48
    @bearqq 只编译 flask 呗,gunicorn 只是用来 fork 的(误
    feng1234
    feng1234
    Nov 7, 2017
    49
    如果是那种金融交易策略类的程序,还是很有保护的必要,因为这个是公司核心
    Fen2g
    Fen2g
    Nov 7, 2017
    50
    jyf
    jyf
    Nov 7, 2017
    51
    @gouchaoer 这么多人 就你说到点子上了 很明显 楼主是想提防控制了云的甲方
    sagaxu
    sagaxu
    Nov 7, 2017
    52
    修改解释器,在 pyc 文件中有规律的插入一些错误的 opcode,让标准解释器解释不了,标准反编译器工具也逆向不了。如果你的项目真的很值钱,恐怕用汇编写也没用,照样有人能破解,就看值不值得破。
    recall704
    recall704
    Nov 7, 2017
    53
    不怕,我写的代码过几天我自己都看不懂了。

    ^~^
    goodryb
    goodryb
    Nov 7, 2017
    54
    那你就用自己的服务器部署,对外提供 API 接口就好了
    Wicked
    Wicked
    Nov 7, 2017 via iPhone
    55
    你自己编译一个虚拟机,bytecode 改一下,编译成 pyc 执行,还可以写个包管理系统把 pyc 打包进去,方法很多的。但真想要破解还是可以反编译出来的
    ttycode
    ttycode
    Nov 8, 2017 via iPhone
    56
    docker 部署,然后增加自毁脚本,关闭登陆。
    hareandlion
    hareandlion
    Nov 8, 2017 via iPhone
    57
    @est 没有直接或间接被 import 过的 module,还是不会被加载到内存的吧?
    est
    est
    Nov 8, 2017
    58
    @hareandlion 延迟删文件嘛。
    goodloop
    goodloop
    OP
    Nov 8, 2017
    59
    @ttycode 自毁是指删除 docker 的镜像和 container 么?关闭登录是指关闭登录 host 还是 docker container ?
    clino
    clino
    Nov 8, 2017❤️1
    60
    刚看到一个贴,google: "[CPyUG] 如何导入和运行加密的 Python 脚本"
    cs371332219
    cs371332219
    Nov 11, 2017
    61
    cxFreeze 和 pyInstaller 可以把你的项目打包成二进制文件。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1490 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 116ms · UTC 16:38 · PVG 00:38 · LAX 08:38 · JFK 11:38
    ♥ Do have faith in what you're doing.