2010-07-06 108 views
1

在Java中,使用Glassfish Server时,我们只能保存与我们的Web应用程序根相关的文件。因此,你不能直接保存文件,例如c:\program files\abc.txt,而用PHP这是工作。它有效吗?一个人不应该能够在Web应用程序根目录之外的硬盘上引用任何位置(除非您正在使用虚拟目录)。为什么有这么矛盾的原则?在磁盘上保存文件

回答

2

这是Glassfish的一项安全功能(通过JVM的安全功能)。如果你真的想要,你可以禁用它,但想法是,即使你的Web应用程序中存在一些令人讨厌的安全漏洞,如果它可以被停止,那么它不应该危害到盒子的其余部分。

我不知道PHP是否有这样的功能 - Web应用程序容器可以合理轻松地完成此操作(以及类似的操作),这是因为Java和安全管理器的其他沙盒可用。

1

PHP比Java EE容器早。它可以让你摆脱很多,在新的,不太“信任”的系统中你不能逃避。

2

实际上,任何已部署的应用程序都不能在其范围之外进行修改,因为这可能会导致恶意(或错误)应用程序搞乱托管服务器。话虽如此,它也取决于应用服务器,有些服务器可能比其他服务器更严格。我知道Tomcat允许我直接写入C驱动器,而如果我这样做的话,Websphere服务器会对我咆哮(尽管必须有一个选项可以关闭它)。

+0

在实际部署中,操作系统应至少对服务器进程施加安全限制(至少这是为什么我们不尝试以root身份运行这些进程的原因)。不会阻止恶意应用程序在容器过程中损害其他应用程序(如Tomcat),但它至少应该保护服务器本身。 – Curtis 2010-07-06 15:45:46

1

PHP有两个这样的安全功能。默认情况下都不启用。

  1. open_basedir是一种配置设置,将文件操作限制为指定的目录树。要匹配Glassfish的配置方式,应该将其设置为Web服务器配置中的文档根目录(如果您使用Apache,则使用php_admin_value)。它将文件操作限制为运行PHP的用户所拥有的文件操作......很可能是Web服务器使用的帐户。