首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP源代码加密概念

PHP源代码加密概念
EN

Software Engineering用户
提问于 2014-11-21 06:32:59
回答 2查看 1.8K关注 0票数 2

场景

我希望保护用PHP编写的软件。PHP的本质是它是以纯文本的形式交付的,因此不能由它本身来保护。我不想在服务器上安装lib,比如ZendGuard、IonCube或SourceGuardian。我希望个人应该使用软件,但不应该干扰应用程序的受保护部分(许可,敏感部分)。该软件作为试用软件分发给客户。

解概念

用分组密码(AES)加密有效载荷,并将密钥存储在远程系统上。对于软件,需要密钥来解密有效载荷。软件的模糊部分应该通过SSL通过cURL与密钥服务器联系,并请求解密密钥。解密密钥只应发送回持有试用许可证的服务器IP。文件的校验和也可以与密钥请求一起发布,如果它甚至失败一次,密钥服务器可能会拒绝永远提供解密密钥,这将有望防止篡改。

Notes

  • 请求试用的客户端将提前知道,因此未经授权的软件副本不应首先收到(正确的)解密密钥。
  • 解密密钥对每个客户端都是唯一的,有效负载部分也是唯一的。
  • 代码将永远不会被存储、解密,而是只在运行时和eval()'ed被解密。

问题

  • 这是一次失败还是注定要失败?
  • 这难道不会保护你免受任何人最微小的干扰吗?

谢谢!

EN

回答 2

Software Engineering用户

回答已采纳

发布于 2014-11-21 09:36:44

让我们看看。一旦您的密钥服务器发送解密密钥,黑客就可以监视网络活动来检索密钥并使用它解密源代码。从现在起,他可以用它做任何他想做的事,特别是:

  • 修改它的方式可以是发送您期望的校验和,而不是发送文件的实际校验和,
  • 替换与密钥服务器联系的部分,或简单地删除它以避免检查,
  • 在P2P网络上发布解密源代码,删除密钥检查部分。

另一方面,您的产品的某些合法用户可能更喜欢使用您的竞争对手的产品,因为:

  1. 他们会发现你的应用程序启动缓慢。与远程密钥服务器联系需要时间,最终用户可能接受也可能不接受。
  2. 解密也需要时间,这可能会在服务器上浪费太多资源。如果竞争对手不增加这种复杂性,他们的产品可能会获得更好的CPU占用。
  3. 禁止使用IP会引起更多的问题。大多数用户都有动态IP,这意味着禁令只会在非常有限的时间内(例如某一天)影响到相关人员,然后阻止其他人访问您的产品。同样地,禁止整个公司或无线网络网站在营销方面也是相当不幸的。
  4. 他们不会接受依赖脆弱的产品(除非你在一家非常大的公司工作,保证该产品将在未来5年、10年或15年内得到维护)。没有源代码意味着:
    • 如果您的公司停止维护它,您的客户将使用一个过时的产品,其中可能包含已知但未修补的错误。
    • 如果一个客户想要修改它,他别无选择,只能付钱给你(因为垄断而付了很多钱)来做这个改变。

  5. 他们不会接受依赖能够包含恶意软件的产品。如果你是一家有着良好声誉的知名公司,这不是问题。如果你是一家初创公司,或者没有一个良好的声誉,一些客户将不会安装你的应用程序,因为有恶意代码的风险。这一点在公司的服务器上尤为重要,因为这些服务器通常比桌面PC受到更多的保护。

如果您确实发明了应该受保护的东西(很可能,你还没有),那么保护它的唯一方法就是将敏感代码移动到您自己的服务器上,然后提供一个从外部访问功能的API。一旦给出了代码,无论它受到多好的保护,它都可以被解密;否则,就不可能运行它。

如果唯一的目标是拥有一个试用版,那么只需在您自己的服务器上托管它。潜在客户将能够尝试,如果他们有兴趣,购买该产品。当然,为了说服系统管理员,您还应该提供关于应用程序的部署和托管方式的非常详细的信息。

稍后,当您的产品成功时,您可以考虑通过提供:

  • 在您的服务器上托管的有限时间演示,
  • 产品仍托管在服务器上的每月付费订阅。多种不同的订阅可能分别针对个人、小公司和中型公司。对于小型实体来说,产品可能会在一年或其他很长的一段时间内(或永远)失控。
  • 客户在自己的服务器上部署应用程序的更昂贵的解决方案。这种解决方案可能以大公司为目标。

有了这个模型(被许多初创公司使用),源代码的加密就变得几乎无关紧要了。大公司不会尝试从P2P网络下载您的产品,因为所有的遵从性政策都会阻止他们使用未经许可的产品。

票数 10
EN

Software Engineering用户

发布于 2014-11-21 10:02:52

你在对MainMa回答的评论上写道:

我想了几天的简单试用期,在购买完成后,交付解密版本。主要目标是在不交付源的情况下交付产品(一开始),这样用户就可以看到他是否喜欢该产品(或者它是否有用)。

这正好把你的问题变成了XY问题。换句话说,你是在寻求解决一个问题,而不是问你想要解决的问题,而是询问你提出的解决方案。(如果建议的解决方案实际上是好的,并且您只需要把一些次要的细节弄清楚就可以了。)

如果以上是您这样做的原因,那么就不要混淆源代码了。它将增加巨大的复杂性和风险,与正如MainMa所解释的,许多缺点,没有真正的,实际的优势,任何人。

相反,寄存一份你自己的副本,潜在的客户可以登录并试用。每午夜还原一个空白数据库或类似的内容,向任何用户表明他们输入的任何和所有数据都是可公开访问的,并将被删除,并显着地发布到它的链接以及登录到演示的用户名和密码。

如果数据需要保存一段相当长的时间,用户才能确定应用程序是否适合他们的需要(这听起来不像是基于您几天的讨论),那么可以为潜在客户提供在您的服务器上设置一个试用安装的能力,在经过一些合理、短的时间后自动删除。

此外,此解决方案将使用户能够在升级之前轻松地评估升级是否为他们提供了额外的价值。如果升级在任何方面都是破坏性的,或者降级是不平凡的,那么这本身就是一种优势。

所有这些都需要额外的web托管、cron作业和存储数据库快照和/或默认数据库内容的一些额外副本的成本。

票数 1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/263399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档