Java 开源web应用更容易被黑客攻击?

Java 开源web应用更容易被黑客攻击?,java,security,web-applications,Java,Security,Web Applications,在最近的一次采访中,我被问到: 开源web应用程序(比如基于Struts/Spring构建的)更容易受到黑客攻击,因为任何人都可以访问源代码并对其进行更改。你如何预防它 我的回答是: java源代码无法直接访问。它被编译成类文件,然后捆绑在war文件中,并部署在Weblogic app server之类的安全容器中。 应用服务器位于公司防火墙后面,无法直接访问 当时,我没有提到XSS和SQL注入会影响基于COTS的web应用程序,类似于开源应用程序 我的问题是: a) 我对这个问题的回答正确吗

在最近的一次采访中,我被问到:

开源web应用程序(比如基于Struts/Spring构建的)更容易受到黑客攻击,因为任何人都可以访问源代码并对其进行更改。你如何预防它

我的回答是:

java源代码无法直接访问。它被编译成类文件,然后捆绑在war文件中,并部署在Weblogic app server之类的安全容器中。 应用服务器位于公司防火墙后面,无法直接访问

当时,我没有提到XSS和SQL注入会影响基于COTS的web应用程序,类似于开源应用程序

我的问题是:

a) 我对这个问题的回答正确吗

b) 我还可以在回答中补充哪些要点

提前谢谢

编辑:


在我消化你的回答的同时,我还要指出,这个问题也是针对诸如Liferay和ApacheOfBiz之类的框架提出的。

这个问题是一个通过隐晦来实现安全性的隐晦论据。我建议你仔细阅读支持和反对的常见论据,看看这是否合适:


我个人的观点是,默默无闻充其量是对抗阿塔克的最薄弱的防御层。它可能有助于过滤未知攻击者的自动攻击,但对确定的攻击没有多大帮助。

a)是的。开放源代码并不意味着开放二进制文件:)句子“任何人都可以更改源代码”是不正确的(您可以更改代码副本,但不能编辑Apache Struts代码)


b) 也许源代码是可见的这一事实使人们更容易看到它可能存在的缺陷并加以利用。但是,同一个论点的作用是相反的:当很多人审查代码时,缺陷会更快地被发现,因此代码最终会更健壮。

一个流行的开源web框架/CMS/库不太可能长时间存在可怕的错误,因为有很多人在查看代码、发现错误并修复它们。(注意,为了使这一点起作用,您需要使您的资料保持最新。)

现在,你的朋友确实有一个小小的观点——如果这个项目是由一群白痴管理的,任何能够修复bug的人都可以引入它们。如果他们从任何随机的垃圾堆中获取补丁而不查看补丁,或者不知道他们首先在做什么,那么就有可能在框架中引入bug。(除非你定期更新,否则这并不重要。)因此,重要的是使用一个由有线索的人妥善维护的

注意,开源框架/应用程序的所有问题也适用于COTS框架/应用程序。在bugtraq和其他类似的列表发布之前,你不会知道后者中的bug,因为大公司喜欢假装他们的软件中没有bug,直到被迫做出反应

a) 我对这个问题的回答正确吗

关于源代码不可访问(改变它)的部分,因为它是在无法触及的地方编译和部署的,这不是一个好答案。这同样适用于非开源软件。针对开放源代码堆栈提出的一点是,源代码可以读取,这将更容易发现可针对已安装应用程序(编译或未编译)利用的漏洞

关于防火墙的观点是好的(即使它也不涉及软件的开放性或封闭性)

b) 我还可以在回答中补充哪些要点

通过模糊性来反对安全性的主要论点(这是本文的论点)是,有了开源软件,更多的人将关注源代码,以发现并解决这些问题

因为任何人都可以访问源代码并对其进行更改

你确定他们是这么说的吗?改变它?不是“研究它”


我不认为任何人都可以仅仅更改Struts的源代码…

我同意这个答案。我还想提醒您,您可能会使用Struts、Spring以及所有开放应用程序的普通安装,因此部署类文件是无关紧要的,因为它们来自完全相同的原始源代码。谢谢Robert-我可以看出我完全误解了这一方面,或者实际上误解了这个问题。@newtoallthis-虽然这是一个很好的答案,但这个问题可能是出于个人目的。问这个问题的人不喜欢开源,并且试图找出原因。他们提出的论点(通过一个引导性问题)不太可信,但其基础并不合理,因此这对提问者来说并不重要。“流行的开源web框架/CMS/库不太可能长期存在可怕的bug”。这里最重要的一句话可能是“长久”。你们可能需要经常更新,因为流行的应用程序提供了一个很有吸引力的目标,见Wordpress.oth,一个COTS应用程序可能很容易有关键的bug潜伏在里面几十年,只是等待有(im)适当动机的人发现。例如,Windows中的GDI漏洞。如果Windows是开源的,这个bug不会持续那么久我完全误解了这个问题。面试官也没有纠正我,所以我认为我当时做得很好。