X lang有安全吗?

时间:2010-02-18 10:49:55

标签: java security jvm

在与Java开发人员讨论时,我经常听到这个问题。他们(java开发者)总是问你的选择是否有安全性,我不知道该怎么回应。 谁能告诉我Java安全意味着什么?

8 个答案:

答案 0 :(得分:4)

很快:在java中,您可以遇到不同类型的“安全性”(给予这个词更广泛的解释)。

  • JVM级别的安全性(即同一JVM中的两个应用程序之间)
  • 容器级别的安全性(在同一个应用程序服务器中部署的两个war之间以及容器阻止来自未授权客户端的调用的能力)
  • 应用程序级别的安全性(更可能是通常意味着使用框架的身份验证和授权系统)

但我不认为在没有更多背景的情况下,问“语言X有安全性”是没有意义的。

答案 1 :(得分:3)

Java不允许访问底层系统,因此抽象提供了对内存中缓冲区溢出的安全性(例如)。使用本机语言,您可以访问系统并使用更多功能,但是您可能会引入错误,这些错误可能会为攻击者提供全面的系统控制。

此外,Applet和Webstart应用程序还有一个沙箱,可防止网站所有者访问个人数据或控制您的桌面。

答案 2 :(得分:3)

嗯,正如ccheneson指出的那样,它们可能意味着许多事情:

  • 用于安全通信的API(加密,网络传输的数据加密,数字校验和)
  • 语言内部的安全性,例如防止缓冲区溢出等程序员错误
  • VM中的安全性,例如用于运行具有有限权限的代码的沙箱模型

所以告诉他们他们的问题太宽泛,无法得到有意义的答案。他们可能只是试图给你留下深刻的印象......

答案 3 :(得分:2)

告诉Java开发人员语言没有“安全性”。平台(库和框架)可能提供API,可能用于提高安全性(或被误用或用于使事情变得不必要复杂,这总是会降低安全性)。

无论使用何种语言或平台,应用程序及其部署和运行方式都可能是安全的。安全性是一种质量属性,就像性能或可维护性一样。编程语言是其中的一个次要方面;平台API是一个稍微大一点的方面,但不是大多数主流主流平台之间的区别。

答案 4 :(得分:1)

我怀疑你正在谈论的Java开发人员主要考虑的事情是自动数组和字符串边界检查 - 像C和汇编程序这样的低级语言没有,这导致非常常见的编程错误导致极其严重安全漏洞。

Java的设计确实几乎完全阻止了这种错误,因为它会自动检查数组边界。但这并不意味着“Java具有安全性” - 许多其他类型的攻击(如跨站点脚本和SQL注入)仍然存在,而且许多编写得很糟糕的Java应用程序也容易受到攻击。

对于几乎所有其他现代高级语言来说也是如此。 Java在20世纪90年代中期引入并且C ++是其主要竞争对手时,对于缓冲区溢出而言是“安全的”是一项重要的成就(并且在市场营销中非常强调)。如今,随着许多其他语言的广泛使用,它不再是一件大事了。

答案 5 :(得分:0)

他们可能会参考Java SE Security。所以我想通过“有安全性”,它们意味着一组API来增强通信,数据的安全性......

答案 6 :(得分:0)

我认为他们正在讨论在SecurityManager的控制下运行应用程序的可能性(Sandbox概念的演变)。可以将SecurityManager配置为禁止某些类型的权限,例如访问(部分)文件系统,打开连接,终止VM,......

这是只是“平台安全”,还有更多与安全相关的主题 请参阅此technotes,特别是一般安全性部分(Java Security OverviewSecurity Architecture

答案 7 :(得分:0)

是基于语言的安全性吗? http://en.wikipedia.org/wiki/Language-based_system