当前位置: 首页 > 面试题库 >

沙盒JVM可保护服务器免受不受信任来源的侵害

公良俊楚
2023-03-14
问题内容

接受并执行上传的不受信任的代码时,如何保护我的服务器免受恶意活动的侵害?

用户应该能够实现我的界面和给定的数据,执行一些计算并返回数据。不需要I / O操作,当然也不需要线程/进程操作或其他伪造。

使用java.policy文件可以拒绝所有内容(不授予任何权限)。

$ cat test.policy 
grant {
};

使用此策略文件,未授予的操作将导致安全异常。

$ cat Print.java
public class Print {
    public static void main(String a[]) throws Exception {
        System.out.println(System.getProperty("os.name"));
    }
}

$ javac Print.java
$ java -Djava.security.manager -Djava.security.policy==test.policy Print
Exception in thread "main" java.security.AccessControlException: 
  access denied (java.util.PropertyPermission os.name read)
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
    at java.security.AccessController.checkPermission(AccessController.java:546)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
    at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285)
    at java.lang.System.getProperty(System.java:650)
    at Print.main(Print.java:3)

这是万无一失的吗?我需要做更多的事情来保护服务器环境免受不可信来源的侵害吗?


问题答案:

如果您是我,我不会仅仅依靠SecurityManager。是的,如果Java沙箱完美无缺,那么您的配置看起来是正确的,这就足够了。但是,请查看每个Java安全版本中修复了多少个Java漏洞。例如,最新的Oracle
Java
CPU

。这些Java漏洞中有很多是从沙盒逃脱的。在客户端这是非常糟糕的情况(许多人都主张从浏览器中关闭Java),但在服务器端则更加糟糕,因为攻击者不必引诱您访问其站点,他们可以攻击您的网站。服务器。

例如,目前我个人有几个这样的漏洞,我正在等待Oracle解决,或者我正在将这些漏洞传达给Oracle。而且我不是唯一拥有它们的研究人员。而且一定也有坏蛋拥有它们。因此,即使您在第二个新版本问世后认真地更新Java,也不是安全的。

我认为至少您应该在操作系统级别,权限等方面拥有一些东西来控制服务器进程。抱歉,那里没有很好的建议,但是我只是说不,您绝对不能依靠JVM
Sandbox来确保服务器的安全性。



 类似资料:
  • 为此,我使用以下命令将。cer文件导入到jks文件中。(密码和密码一样,提示要求接受证书,我给y,然后说证书加到keystore了) keytool-importcert-file xyz.cer-keystore test.jks-alias“testsp” 然后我使用这个jks文件创建凭据,如下所示。 谁能指导我解决这个问题吗?

  • 本文向大家介绍如何修复和保护Linux服务器免受Ubuntu上的脏COW漏洞的侵害,包括了如何修复和保护Linux服务器免受Ubuntu上的脏COW漏洞的侵害的使用技巧和注意事项,需要的朋友参考一下 在本文中,我们将学习如何修复Dirty Cow Linux漏洞。Dirty Cow Linux漏洞已于2016年10月19日升级,因为它是Linux操作系统在内核级别的特权升级漏洞,该漏洞被称为Dir

  • 我刚刚在Google Cloud上的VM上设置了我的Neo4j服务器,我使用的是企业版4.1.1,并且我已经完成了David Allen关于如何使用LetsEncrypt获得证书的精彩帖子(在这里)。 这一切都工作得很好,我现在有了一个完全安全的Neo4j服务器,我可以通过浏览器()使用我的主机名访问它。但是,我现在在让我的应用程序使用javascript驱动程序连接到服务器时遇到了问题。 我不断

  • 我已经通过复制我计划连接的Idp的509条目生成了testIdp.cer文件。然后,我通过执行以下命令创建了JKS文件 执行时,它要求输入我已提供密码的密码。对于问题“信任此证书?[no]:“,我给出了”y“作为输入。消息显示为“证书已添加到密钥库”。 然后,我在securityContext.xml中配置了以下详细信息: 但是当我运行应用程序时,在服务器启动和加载应用程序的主页时,我得到了以下两

  • 我正在将spring-saml2-sample应用程序集成到我自己的应用程序中。我的服务提供商连接到Shibboleth IDP。我正在使用Spring Security SAML应用程序附带的samlkeystore.jks中提供的私有证书测试SP。我使用以下命令在密钥库中注册了IDP签名公钥:keytool-importcert-alias idpsignkey-keypass passwor

  • 我正在尝试使用SAML保护资源。有三个参与者在起作用:身份提供者(IDP,在我的控制范围之外)、服务提供者(SP,我碰巧在使用spring security saml,但这个问题并不特定于此),以及受保护的资源(PR,SP之外服务中的某个受保护endpoint)。 我需要支持两种场景: 用户第一次尝试访问PR,没有任何会话 对于场景1应该如何工作,有足够的指导,因为根据我所看到的,这是使用SAML