我应该只在服务器上部署 .pyc 文件来保证代码安全吗?
我想把一个Django应用程序部署到云计算环境中,但我对源代码的安全性有点担心。我可以只把编译后的.pyc文件放到那里吗?根据官方的Python文档,pyc文件“反向工程的难度中等”。
这种做法有什么优缺点?这是一个标准的做法吗?
我不使用AWS,想说的是我所在的国家对云计算完全不可信……
4 个回答
一般来说,使用PYC文件进行部署是可以正常工作的。
优点,正如你所说的,PYC文件在一定程度上可以帮助保护源代码。
缺点,我发现了以下几点:
1). PYC文件只能在相同的Python版本下使用。例如,"a.pyc"是用Python2.6编译的,而"b.pyc"是用Python2.7编译的。如果b.pyc想要导入a.pyc,那就不行。同样,使用"python2.6 b.pyc"也无法运行。所以一定要记得用相同的Python版本来生成所有的PYC文件,并且在你的云服务器上也要使用相同的版本。
2). 如果你想通过SSH连接到云服务器进行实时调试,PYC文件是没办法帮你解决这个问题的。
3). 部署工作需要额外的步骤。
没错,直接部署编译好的文件就可以了。还有一个需要考虑的点是你应用的其他方面。比如说,如果现在的错误会让坏人知道你用的是什么技术,或者在你的应用崩溃时显示的错误信息类型。这些都是我认为需要关注的其他方面,肯定还有更多需要注意的地方。
直接使用 .pyc 文件来部署程序并不总是有效。例如,如果你用的是 Apache 和 mod_wsgi,那么至少 WSGI 脚本文件还是需要用普通的 Python 代码来写。
有些网络框架可能还需要你保留原始的源代码文件。使用 .pyc 文件并不能很好地隐藏那些可能在网络框架模板中包含的敏感信息。
总的来说,使用 .pyc 文件的保护效果非常有限,市面上有工具可以反向工程这些文件,从中提取信息。
所以从技术上讲,你的应用可能可以运行,但这并不是保护源代码的安全方法。
更好的做法是使用一个你信任的托管服务。这通常意味着要为一个信誉好的托管服务付费,而不是仅仅选择最便宜的那种。