【问题标题】:is it safe to use online script obfuscation?使用在线脚本混淆是否安全?
【发布时间】:2011-10-09 12:21:24
【问题描述】:

我正在考虑保护我的脚本以保护大多数用户(非网络开发人员),我遇到了一个在线服务来编码 php 脚本。不过我不确定。

加密php脚本安全吗?如果编码后的代码有问题怎么办?

【问题讨论】:

  • “编码”是什么意思?你能提供一个服务的链接吗?我们不知道你在说什么。
  • 嘿抱歉。这是链接:rightscripts.com/phpencode
  • 我想他一定是在谈论混淆或“打包”代码。

标签: php security obfuscation software-distribution


【解决方案1】:

如果您打算分发 PHP 文件,那么我建议您不要这样做。它只会激怒那些想要修补它的人。

如果出于某种原因你不希望他们修改它,那么不要分发 PHP 文件。

如果您需要分发文件并且不希望他们修改它,那么我强烈建议您不要在 PHP 中执行此操作,而是使用 C 作为 PHP 的扩展来编写功能。

您会注意到,我绝不建议您实际继续“编码”php 文件。那不会给你买任何东西。

【讨论】:

  • 这是一个 WordPress 主题,因此需要提供所有 php 脚本才能使其正常工作。 “使用 C 作为 php 的扩展”是什么意思?什么是 C?
  • C 是一种完全不同的编程语言。虽然这个答案略微正确,但我不同意唯一的选择是学习一门全新的语言。正如我在自己的回答中提到的那样,有许多受人尊敬的商业解决方案可用于分发受逆向工程保护的 PHP 代码。也就是说,PHP 是一种适合开源的语言,这就是为什么它被作为一种在线语言接受的原因。代码和引擎本身并不是为了创建客户端实现者无法访问的产品。
  • 嗯,好的。您能否列出解决此问题的其他一些方法?我在脚本中有敏感数据(mysql db 连接信息),所以我真的需要它尽可能安全。感谢您的宝贵时间。
  • @Chris:我提到 C 只是为了增加所涉及的难度。此外,没有什么可以“保护”您免受逆向工程的影响。让它更难一点?是的;保护?不。我同意你的观点,PHP 更多的是用于开源而不是用于分发付费、尝试和保护它的知识产权。
  • @Chris Lively(和@nav):这里的共识是不,你提供的链接不安全,不,你不能对你的源代码有绝对的保护。我们可能有不同的方法来缓解这种现实,但我们任何人提供的任何解决方案都是只处理 degrees 安全性的折中办法。简而言之,这并不像看起来那么简单。 :)
【解决方案2】:

如果您希望混淆服务器端 PHP,最好的选择是使用 Zend Guard (http://www.zend.com/en/products/guard/) 等商业产品。任何自制加密都不安全 - 您的代码可以很容易地通过相当微不足道的努力进行逆向工程。您链接到的页面没有任何可信度,它只是某人的副业。他们对保护您的信息没有任何责任或利益。

即使是这些商业产品(Zend Guard、ionCube、phpShield、SourceGuardian),如果有人真的非常想解密,也可以解密。任何语言的工具或技术都无法进行绝对安全的混淆,没有“不可破解”的系统。随着时间的推移,一切都归结为努力。

如果它不够重要而不能正确地做,那么你可能在这个问题上浪费了你的时间。此外,如果某些信息或代码的私密性绝对是至关重要的,那么您根本不应该将其公开。

[为清楚起见进行了编辑]

【讨论】:

  • 虽然是一个很好的链接,但应该提到这里的关键字是“容易”,与禅守有关。与他们极具误导性的营销声明不同,您实际上无法阻止逆向工程。但是你可以让它变得更困难一些。 forums.zend.com/viewtopic.php?f=57&t=4709
  • @Chris Lively:Chris 确实说“混淆”,而 OP 确实说“非网络用户”,所以这可能就足够了。
  • @Chris Lively:同意 - 我并不是要给人留下 Zend Guard 正在做一些神奇而不可能的事情的印象。编辑答案以澄清这一点,因为理解这一点非常重要,而且我认为很多入门级技术人员都不会理解没有绝对安全性这一事实。
  • +1: ;) 我们说的是同一件事,我认为您可能说得更好。
【解决方案3】:

最终,您需要信任加密方。如果您不信任他们(显然您不信任),那么不要让他们访问您的服务器(通过执行他们的解密代码/您的混淆代码,可能还有谁知道里面还有什么)。就这么简单,尽管可能不方便。

【讨论】:

  • 嘿。我应该解释为什么我要保护他们。抱歉,它是一个 wordpress 主题的脚本,所以我将不得不给出我不希望用户使用的脚本。
  • @nav:你应该已经解释过了,是的 :) 删除了第二段,因为它偏离了要点。这仍然存在:您将从该页面获得的代码将在您的服务器上拥有您的权利;你相信它不会滥用这些权利吗?
  • 就是这样。我以前从未使用过该服务,所以我根本不信任它。并且脚本包含敏感信息,例如 mysql db 连接信息,所以我不想冒任何风险。
  • @nav: 好吧,如果你根本不信任它,并且你想避免风险,你应该给它您的敏感数据?我认为问题(和解决方案)不会比这更明显,即使这是一个不方便的答案。
  • What @Chris said,注意这不是免费的(甚至不是免费的啤酒)产品。另请参阅此问题:stackoverflow.com/questions/336057/…
【解决方案4】:

php 通常运行在服务器上,用户无论如何都无法访问代码(无论是源代码还是任何其他表示形式)。没有理由在那里混淆它。

混淆 php 仅在您将 php 代码提供给客户端的极少数情况下有用。例如,如果您希望客户端能够运行自己的服务器,但不授予他们对代码的完全访问权限。

【讨论】:

  • 是的,我正在开发一个 wordpress 主题(所以我必须将所有内容都放在一个包含所有 .php 文件的 .zip 中)。我有 php 脚本,我不想让用户玩。
【解决方案5】:

所以,看起来它所做的只是混淆了代码,因此它不适合人类阅读。这真正有用的唯一方法是防止可以访问代码的懒人阅读它。但是,它使用简单的函数来编码/解码,因此如果有人可以访问它,将很容易对其进行解码。

这让我明白了... PHP 安全性的工作原理是不允许任何人访问源文件。如果不应该访问的人得到它,那么这个“编码”的东西对你没有任何好处。

【讨论】:

    【解决方案6】:

    OP 提到了保护数据库连接细节的兴趣,应该记住,无论代码本身使用什么保护系统,开源的 PHP 引擎和组件库都对可以保护的内容设置了一些绝对限制。达到。例如,如果 MySQL 连接详细信息隐藏在脚本中,那么这些详细信息可以在不接近 PHP 脚本本身的情况下简单地显示出来,只需通过对 MySQL 库或相关 PHP 模块包装器进行轻微修改的 PHP 构建运行脚本.在这种情况下,即使按照 Chris L. 的建议将细节隐藏在 C 模块中也不会提供额外的保护。使用 ionCube 和 Zend 等编译代码系统当然可以为源代码提供良好的保护,但只要数据在 PHP 核心中遇到例程,就会暴露出来。

    显然,对于您可能会发送敏感详细信息的任何在线服务,您应该尽职调查并尽最大努力确保它具有良好的血统。除此之外,OP 所质疑的网站没有有效的 https URL 应该立即警告说这是不行的,不仅仅是因为缺乏连接加密,而是表明他们没有提供他们认为是的服务严重。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-14
      • 2012-08-22
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      相关资源
      最近更新 更多