【问题标题】:Is it worth to obfuscate java web application? [closed]混淆Java Web应用程序是否值得? [关闭]
【发布时间】:2010-11-28 00:22:05
【问题描述】:

是否值得混淆 java web 应用程序?为什么?

【问题讨论】:

  • 也许我们需要混淆以防止网络主机窃取我们的代码,不是吗?

标签: java web-applications obfuscation


【解决方案1】:

绝对是的。

如果您的开发过程正确,则只有二进制文件和一些支持文件(例如标记和样式表)需要在服务器上。没有充分的理由在任何生产环境中混淆二进制文件。

这里的其他人说这样做会给员工带来问题。唯一应该知道或关心二进制文件内容的人是开发人员——他们有源代码,所以他们不应该担心在编译对象周围闲逛。

我可以看到,任何无法访问源代码的人都会对二进制文件的内容感兴趣的唯一原因是逆向工程 - 您的员工中没有人应该对逆向工程您自己的产品感兴趣,除非他们无法访问源代码。这意味着它们要么没有被清除该代码,要么你丢失了它,这意味着你的源代码控制系统要么很糟糕,要么完全丢失。那是完全不同的对话。

我还没有听到任何服务器端混淆导致开发或管理困难的实际例子。

【讨论】:

    【解决方案2】:

    混淆你的服务器端代码是个好主意吗?我会给出一个不合格的“是”。

    现实情况是end user 只是一个可能有邪恶计划的团体。很多时候internal 员工,无论他们是business userssupport staff 等,都可能有自己的计划.. 或制定了unwitting accomplices

    如果您处理任何需要密码才能访问的信息,那么您有有责任利用您可以使用的所有工具来保护这些信息。

    这包括保护它免受外部人员和internal 人员的侵害。由于拥有过多访问权限的内部人员,公司总是会丢失数据和知识产权。这些人是否故意窃取信息或simply lost control of their computers due to hacker attacks 无关紧要。

    所以,再一次,是的,第一步是混淆,希望获得二进制文件的人更难弄清楚您的应用程序是如何工作的。当然,您应该通过保护它所在的服务器走得更远;不仅仅是production,而是一直回到source control

    【讨论】:

    • 你在人们真正犯罪之前就将他们定为犯罪。虽然很多入侵尝试确实来自内部来源,但混淆代码是给员工过多访问权限的错误解决方案。混淆更有可能惹恼合法的管理人员,并且不会防止恶意内部人员造成破坏。如果您不希望任何人读取您的文件,请使用操作系统的文件系统访问控制并允许人们执行但不读取可执行文件。
    • @Lie Ryan:混淆只是腰带中的一种工具。 ACL 也很重要,但事实是非开发人员将能够访问代码;混淆至少会提供一些防御。至于在他们犯罪之前将他们定为犯罪。我宁愿在发现“受信任”的人已经植入代码、复制代码和/或数据等之前消除任何诱惑和/或能力。但是,嘿,如果您想相信不存在企业间谍活动,那么您将拥有更多权力。哎呀,几周前,我遇到了一个拥有竞争对手源代码副本的人。想知道他是怎么得到它的。
    • @Chris,很可能来自源代码控制存储库或开发人员的笔记本电脑。我高度怀疑他们是否反编译了从生产网络应用程序中收集的字节码。至少,这似乎不太可能成为攻击的载体。
    • @Yishai:试试这个。去一家公司,找出他们的网络管理员是谁。给他 5000 美元买一份他们当地网站的副本,告诉他你甚至不需要这些数据。几天之内,您几乎肯定会拥有它,拉上拉链,准备出发。
    • 当然,最不可能让你入狱的版本是:等待相关公司发布工作,申请,获得工作。自己复制东西。退出。
    【解决方案3】:

    是否值得混淆 java web 应用程序?

    视情况而定

    为什么?

    如果您授权您的网络应用程序安装在您客户的网站上,并且您不希望您的客户通过反编译来重复使用您的代码*,那么可以。

    如果您正在为您的网络应用程序提供服务,并且只能从您那里获得安装,我会说这不值得。更好的是增加您的网络安全性。

    * 见 Stephen C 评论

    【讨论】:

    • 混淆不会阻止客户反编译您的代码。即使他们没有完全成功地反编译为可用的 Java 源代码,他们也可能找出您试图隐藏在代码中的任何秘密。
    • 也许我们需要混淆以防止网络主机窃取我们的代码,不是吗?
    【解决方案4】:

    您可能会找到与Do you obfuscate your commercial Java code? 相关的答案。

    【讨论】:

      【解决方案5】:

      国际海事组织,没有。

      混淆主要有两个用例:

      1. 保护嵌入在代码中的访问控制“秘密”(例如密码),以及
      2. 防止有人窃取您的“知识产权”。

      问题在于,混淆只会挫败半心半意的逆向工程尝试。认真的尝试总会成功。反编译一个混淆的 JAR 文件并不难,而且有很多工具可以做到这一点。

      对于上述用例,更好的混淆替代方法是:

      1. 只是不要在代码中嵌入秘密,并且
      2. 以下一项或两项:
        • 保护您的网络服务器,使黑客无法获取代码,并且
        • 不要发布您认为有价值的 IP 的代码,或者如果您这样做了,那么只将代码发送给已签署保护您的知识产权的具有法律约束力的合同/许可协议的人。

      【讨论】:

      • 当然。您可以反编译混淆的 JAR。事实上,它与“普通”罐子是一样的。但它是桶式可读的......
      • 它的可读性足以让一个有一点点技能的坚定的黑客能够准确地弄清楚它是做什么的,以及它是如何做到的。
      • #include #define __(a) goto a; #define ___(a) putchar(a); #define _(a,b) ___(a) __(b); main() { _:__(t)a:_('r',g)b:_('$',p) c:_('l',f)d:_(' ',s)e :_('a',s) f:_('o',q)g:_('l',h)h:_('d',n) i:_('e',w)j :_('e',x)k:_('\n',z) l:_('H',l)m:_('X',i)n:_('!',k) o:_('z',q)p:_('q',b)q:_(',',d) r:_('i',l)s:_('w',v) t:_('H',j) u:_('a',a)v:_('o',a)w:_(')',k) x:_('l',c) y:_('\t',g)z:___(0x0)}
      • @Antoine:那不是 Java。 Java 反编译器不会无缘无故地在其输出中添加一层奇怪的 C 预处理器垃圾。
      • @Antoine Claval:真的吗?这是我一生中见过的最简单的事情(JVM 字节码除外)pastebin.com/LNP22xT2
      【解决方案6】:

      您会混淆 Java Web 应用程序的唯一情况是,如果您将代码提供给客户以在他们的服务器上运行。否则,这只是浪费时间和额外的复杂性。

      混淆的目的是使某人更难反编译您的字节码并从中获取有用的代码。为此,他们必须有权访问您的类文件,只有当您将它们交付给您的客户时才存在,而不是当他们远程访问时。

      【讨论】:

      • 也许我们需要混淆以防止网络主机窃取我们的代码,不是吗?
      • @user01,您需要采取更好、更重要的安全措施来保护托管代码。如果您担心第三方托管商到那个级别,老实说,您应该自己托管。
      • 谢谢。所以你的意思是我不应该对此持怀疑态度,这是一个信任问题,对吗?您能否提示或指出必须采取哪些其他安全措施来保护?
      • @user01,这确实是整个其他 stackexchange 站点 (security.stackexchange.com) 的主题。但是在这种情况下,闯入正在运行的生产服务器窃取源代码是最不可能的情况之一——如果目标是获取源代码。您的源代码控制存储库是此类攻击者的真正目标。
      【解决方案7】:

      我要补充一点,你应该有一个很好的理由,因为混淆会使调试变得更加困难。

      【讨论】:

      • 也许我们需要混淆处理以防止网络主机窃取我们的代码甚至我们的整个业务,不是吗?
      【解决方案8】:

      没有。该代码存储在外部用户(希望)无法访问它的服务器上。如果您认为值得(最少的)IP 保护,您可能想要混淆 JavaScript。

      最好的办法是确保您的服务器安全性达到标准,并且您没有对应用程序目录的开放访问权限(无论如何都不应该发生这种情况)。

      【讨论】:

      • 很高兴外部用户是我们唯一需要担心的。 翻白眼
      • 选词不好,也许:)
      猜你喜欢
      • 2010-11-12
      • 2011-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多