Concordo com o Oziel. O difícil é limitar o que uma web application pode fazer. Aqui trabalhamos com diversas fábricas de software e já passei por aplicações que emitiam System.exit() provocando a queda do servidor, indisponibilizando não somente o nosso site mas também algumas áreas administrativas e da fábrica!
Um dos testes que pretendo fazer é alterar o diretório default do weblogic e ver se isto limita o acesso ao disco, mas ainda me soa como um quebra-galho. Deve existir um meio de limitar o escopo da aplicação não permitindo acessos potencialmente perigosos.
Por exemplo no exemplo do Oziel, temos:
permission java.io.FilePermission "<<ALL FILES>>", "read,write";
e no weblogic temos
permission java.io.FilePermission "WEBLOGIC-APPLICATION-ROOT${/}-", "read,write";
o que é um pouco mais restritivo.
Abraços,
Cicero
Abaixo segue o weblogic.policy.
//
// To use this file you must turn on the java security manager by defining
// java.security.manager and setting the java.security.policy property to
// point to the security policy which should be in the lib directory.
// For example:
// java -Djava.security.manager
// -Djava.security.policy==${/}weblogic7${/}bea${/}weblogic700/server/lib/weblogic.policy
// weblogic.Server
//
// You can edit this file and change the permissions for your applications
// or update the codeBase line to point to where your server is installed
// The codeBase location must be a URL, not a file path
// so Windows users beware of backslashes.
//
grant codeBase "file:${/}weblogic7${/}bea${/}weblogic700/server/lib/-" {
permission java.security.AllPermission;
};
grant codeBase "file:${/}weblogic7${/}bea${/}weblogic700/server/ext/-" {
permission java.security.AllPermission;
};
grant codeBase "file:${/}weblogic7${/}bea${/}weblogic700/samples/server/eval/pointbase/lib/-" {
permission java.security.AllPermission;
};
//
// For the petstore demo
//
grant codeBase "file:${/}weblogic7${/}bea${/}weblogic700/samples/server/config/petstore/-" {
};
//
// For the examples
//
grant codeBase "file:${/}weblogic7${/}bea${/}weblogic700/samples/server/config/examples/-" {
};
//
// For the workshop
//
grant codeBase "file:${/}weblogic7${/}bea${/}weblogic700/samples/workshop/-" {
permission java.security.AllPermission;
};
//
// Default permissions that need to be granted to applications at this point
//
grant {
permission java.io.SerializablePermission "enableSubstitution";
permission java.io.FilePermission "${/}weblogic7${/}bea${/}weblogic700${/}-", "read,write";
permission java.lang.RuntimePermission "accessClassInPackage.sun.io";
permission java.lang.RuntimePermission "createClassLoader";
permission java.lang.RuntimePermission "getClassLoader";
permission java.net.SocketPermission "localhost:1024-", "connect,resolve";
permission java.util.PropertyPermission "*", "read,write";
};
//
// These are for the three app types
//
// EJB default permissions
grant codebase "file:/weblogic/application/defaults/EJB" {
permission java.lang.RuntimePermission "queuePrintJob";
permission java.net.SocketPermission "*", "connect";
permission java.util.PropertyPermission "*", "read";
};
// Web App default permissions
grant codebase "file:/weblogic/application/defaults/Web" {
permission java.lang.RuntimePermission "loadLibrary";
permission java.lang.RuntimePermission "queuePrintJob";
permission java.net.SocketPermission "*", "connect";
permission java.io.FilePermission "WEBLOGIC-APPLICATION-ROOT${/}-", "read,write";
permission java.util.PropertyPermission "*", "read";
};
// Connector default permissions
grant codebase "file:/weblogic/application/defaults/Connector" {
permission java.net.SocketPermission "*", "connect";
permission java.io.FilePermission "WEBLOGIC-APPLICATION-ROOT${/}-", "read,write";
permission java.util.PropertyPermission "*", "read";
};
// Standard extensions get all permissions by default
grant codeBase "file:${java.home}/lib/ext/-" {
permission java.security.AllPermission;
};
// default permissions granted to all domains
grant {
// "standard" properies that can be read by anyone
permission java.util.PropertyPermission "java.version", "read";
permission java.util.PropertyPermission "java.vendor", "read";
permission java.util.PropertyPermission "java.vendor.url", "read";
permission java.util.PropertyPermission "java.class.version", "read";
permission java.util.PropertyPermission "os.name", "read";
permission java.util.PropertyPermission "os.version", "read";
permission java.util.PropertyPermission "os.arch", "read";
permission java.util.PropertyPermission "file.separator", "read";
permission java.util.PropertyPermission "path.separator", "read";
permission java.util.PropertyPermission "line.separator", "read";
permission java.util.PropertyPermission "java.specification.version", "read";
permission java.util.PropertyPermission "java.specification.vendor", "read";
permission java.util.PropertyPermission "java.specification.name", "read";
permission java.util.PropertyPermission "java.vm.specification.version", "read";
permission java.util.PropertyPermission "java.vm.specification.vendor", "read";
permission java.util.PropertyPermission "java.vm.specification.name", "read";
permission java.util.PropertyPermission "java.vm.version", "read";
permission java.util.PropertyPermission "java.vm.vendor", "read";
permission java.util.PropertyPermission "java.vm.name", "read";
};