Segurança J2EE

Preview:

DESCRIPTION

Segurança J2EE

Citation preview

Rodrigo Cândido da Silva

Comentar os principais conceitos sobre segurança e demonstrar a implementação de segurança da plataforma Java EE.

Segurança◦ Objetivos da Segurança◦ Princípios de Segurança◦ Algumas Soluções de Segurança

Plataforma Java EE JAAS

◦ Autenticação◦ Autorização◦ Utilização

Conclusões

“Um mecanismo de Segurança da Informação providencia meios para reduzir as vulnerabilidades existentes em um Sistema de Informação.”

Autenticação Autorização Auditoria Confidencialidade Integridade Disponibilidade Não Repudiação

Proteger os ativos; Garantir os princípios da segurança durante

todo o ciclo de vida da informação; Evitar que ameaças explorem as

vulnerabilidades; Evitar ou conter os ataques; Gerenciar e reduzir os riscos; Garantir a segurança da informação em

qualquer meio.

F DFonte de

InformaçãoDestino daInformação

Fluxo Normal

F D

Interrupção

F D

InterceptaçãoI

F D

Modificação

M

F D

Fabricação

F

IP Filtering Network Address Translation (NAT) IP Security (IPSec) SOCKS Secure Sockets Layer (SSL) Application Proxies Firewalls Secure Electronic Transactions (SET) …

Serviços oferecidos pelos containers:◦ Escalabilidade◦ Gestão de memória, ciclo de vida de objetos e estado de

objetos◦ Conexões, Transações, Serviço de nomes

◦Segurança◦ Tolerância a falhas◦ Integração◦ WebServices◦ Clustering◦ Alta disponibilidade ◦ Confiabilidade◦ …

Java Authentication and Authorization Service (JAAS); Mecanismo de Autenticação e Autorização de

Usuários, baseado em uma identidade e role(s) (perfil de acesso) associado(s);

Totalmente compatível com o padrão Java EE; Restringe o acesso a uma aplicação Java, limitando

acesso a uma url, método de um componente EJB ou Conteúdo de uma tela do usuário;

Possibilita uma abordagem declarativa ou programática, dando a possibilidade de um desacoplamento entre segurança e regras de negócio.

Aplicação

Login Context

Login Modules – São “plugáveis” e não interferem nos algorítimos de negócio implementados...

LDAPLoginModule

DataBaseLoginModule

NTLoginModule

Active Directory MySQL NT Server

HTTP Basic Authentication

Form-Based Authentication

HTTPS Client Authentication

Digest Authentication

Passo 1 - Configurando o LoginModule

<!-- Exemplo: File Login Module Arquivo: %JBOSS_HOME%\server\default\conf\login-config.xml--><application-policy name="exemplojaas">

<authentication> <login-module code="org.jboss.security.auth.spi.UsersRolesLoginModule" flag="required">

<module-option name="usersProperties">props/exemplo-jaas-users.properties</module-option> <module-option name="rolesProperties">props/exemplo-jaas-roles.properties</module-option>

</login-module> </authentication>

</application-policy>

Passo 2 – Definindo o Tipo de Autenticação

<!— Define Formulário de login (login-config). Arquivo: WEB-INF\web.xml-->

<login-config>

<auth-method>FORM</auth-method> <realm-name>ExemploJAAS</realm-name>

<form-login-config> <form-login-page>/loginpage.do</form-login-page> <form-error-page>/loginfail.do</form-error-page> </form-login-config>

</login-config>

Passo 3 – Protegendo o Web Container

<!— Define a constraint de seguranca para as actions do sistema. Arquivo: WEB-INF\web.xml<security-constraint>

<web-resource-collection> <web-resource-name>ExemploJAAS</web-resource-name> <description>Mapeamento da acoes do sistema</description> <url-pattern>/homepage.do</url-pattern> <url-pattern>/funcionario.do</url-pattern> </web-resource-collection>

<auth-constraint> <role-name>supervisor</role-name> <role-name>gerente</role-name> </auth-constraint>

</security-constraint>

Passo 4 – Protegendo o EJB Container

<!— EJB 3.0 - Via annotation (Java5 ou superior) Definição da classe-->@Stateless@DeclareRoles({"supervisor","gerente","operador"})public class FuncionarioServiceImpl implements FuncionarioService {

@RolesAllowed("supervisor")public void delete(Integer idFuncionario) {}

@RolesAllowed({"supervisor","gerente"})public void save(Funcionario funcionario) throws LimiteSalarioException { if ((!context.isCallerInRole("supervisor") && (funcionario.getSalario() > 10000.0d))){ throw new LimiteSalarioException("limite.salario.exception");}}

}

JAAS fornece uma estrutura simples, produtiva e integrada com a plataforma Java;

JAAS não implementa toda estrutura de segurança necessária à uma aplicação. Portanto, ele deve ser combinado com outros mecanismos (SSL, Firewalls, Proxies, etc).

?

Recommended