在最近的一次采访中,我被问到:
开源Web应用程序(比如建立在Struts / Spring上)更容易被黑客攻击,因为任何人都可以访问源代码并进行更改。你怎么防止它?
我的回答是:
无法直接访问java源代码。它被编译成类文件,然后将它们捆绑在war文件中,并部署在像Weblogic app server这样的安全容器中。 应用服务器位于公司防火墙后面,无法直接访问。
当时 - 我没有提及任何有关XSS和SQL注入的内容,它们可能会影响类似于开源的基于COTS的Web应用程序。
我的问题:
a)我对这个问题的回答是否正确?
b)我可以在答案中添加哪些其他内容?
提前感谢。
编辑:
在我消化您的回复时 - 我还要指出这个问题也适用于Liferay和Apache OFBiz等框架。
答案 0 :(得分:16)
这个问题是通过默默无闻的隐晦辩护。我建议你阅读通常的论据,反对并看看它是如何适合的:
我个人的观点是,默默无闻是充其量最强的防御攻击层。 可能帮助过滤掉不知情的攻击者的自动攻击,但它对确定的攻击没有多大帮助。
答案 1 :(得分:5)
a)我对这个问题的回答是否正确?
关于源无法访问(更改它)的部分,因为它是在无法触及的地方编译和部署的,这不是一个好的答案。这同样适用于非开源软件。针对开源堆栈的观点是可以读取源代码,这样可以更容易地找到可以针对已安装的应用程序(已编译或未编译)利用的漏洞。
关于防火墙的观点是好的(即使它不涉及软件的开放性或封闭性)。
b)我可以在答案中添加哪些其他内容?
通过默默无闻(这是在这里提出的论点)反对安全的主要反驳是,使用开源软件,会有更多人查看来源以找到并解决这些问题。
因为任何人都可以访问源代码并进行更改。
你确定他们说的是什么?更改?不是“研究它”?
我看不出有人可以如何更改Struts的源代码......
答案 2 :(得分:2)
一个流行的开源Web框架/ CMS /库不太可能长期存在可怕的错误,因为有很多人在查看代码,找到错误并修复它们。 (注意,为了解决这个问题,你需要保持最新状态。)
现在,你的朋友确实有一点点 - 任何可以解决错误的人也可以介绍它们,如果项目是由一群白痴运行的话。如果他们从任何随机的schmuck中获取补丁而不查看补丁,或者一开始就不知道他们在做什么,就有可能在框架中引入错误。 (除非你定期更新,否则这无关紧要。)因此,使用一个由有线索的人正确维护的内容非常重要。
请注意,开源框架/应用程序的所有问题也适用于COTS。在bugtraq和其他此类列表发布之后,你只是不知道后者中的错误,因为大公司喜欢假装他们的软件中没有任何错误直到被迫做出反应。
答案 3 :(得分:1)
a)是的。开源并不意味着打开二进制文件:)句子“任何人都可以更改源代码”是完全错误的(你可以更改你的代码副本,但不能编辑Apache Struts代码)
b)也许源代码可见的事实使得某人更容易看到它可能具有的可能缺陷并利用它们。但是,相同的论证以另一种方式起作用:因为很多人都会检查代码,因此可以更快地找到缺陷,因此代码最终会更加健壮。