我将决定该项目的编程语言。 要求是一些客户希望在没有外部Internet访问的情况下在隔离的服务器上运行应用程序。
要做到这一点,我需要向他们分发应用程序,并且不能使用在我的云上运行的SaaS方法(我想这样做...)。
问题是,如果我决定使用Python进行开发,那么我需要为客户提供易于阅读的代码,而这并不是我真正想做的(当然,我知道“确实需要保护您的源代码”这类问题,但目前已超出范围。
我的一位同事向我介绍了Docker。我可以找到许多有关Docker容器安全性的答案。问题是关于保护(隔离)主机使其免受容器中运行的代码的影响。
我需要知道Docker映像中和在Docker容器中运行的Python源代码是否受到访问的保护-用户是否可以某种方式(不必很容易)访问该Python代码?
我知道我无法保护所有内容,我知道可以反编译/破解所有内容。我只是想知道答案,只是为了决定在Docker中访问我的代码的方式是否足够困难以至于我可以冒险。
答案 0 :(得分:2)
Docker映像是open and documented“应用程序打包”格式。检查图像内容的方法有无数种,包括其中包含的所有python源代码。
在容器内部运行应用程序可提供与逃避容器访问主机的应用程序的隔离。它们不会保护您免受主机上检查容器内部情况的用户的攻击。</ p>
答案 1 :(得分:1)
Python程序作为源代码分发。如果它可以在客户端计算机上运行,则该代码在该计算机上可读。泊坞窗容器仅包含应用程序及其库,外部二进制文件和文件,不是完整操作系统。由于只能在操作系统级别(或通过加密)管理安全性,并且操作系统受客户端控制,因此客户端可以读取docker容器上的任何文件,包括您的Python源。
如果您真的想这样做,则应考虑向客户端提供完整的虚拟机。在这种情况下,VM包含具有基于帐户安全性的完整OS(VM上的管理帐户密码可以与主机的管理员帐户密码不同)。 Is远非止步不前,因为这意味着将使客户端能够在VM上设置或调整网络以及其他问题...
您应该意识到,在网络上运行不受控制的VM时,客户端安全员可能会发出强烈的NO信号。 我永远不会接受。
无论如何,由于客户端具有对VM的完全访问权限,因此即使有可能,也很难真正保护它(禁用从其他设备引导可能甚至无法实现)。在安全性方面,可以肯定的是,如果攻击者具有物理访问权限,那么您就迷路了。
TL / DR:并非您期望的答案,但根本没有。出售解决方案后,您将与客户签订法律合同,而此类问题应在法律层面而不是技术层面上解决。您可以尝试一下,我什至给了您一些提示,但是恕我直言,风险要高于收益。
答案 2 :(得分:0)
我认为这可能是一种解决方案,因为使用“容器”来保护我们的代码免受我们不允许他们访问的人员的侵害。问题是码头工人不是一个安全的容器。由于主机的根具有对Docker容器的最强大的控制,因此我们没有任何方法可以保护根以防止访问容器内部。
我只是对安全容器有一些想法:
如果我们有一个可信任的容器,可以在其中运行tomcat或Django
服务器,则无需进行代码混淆。