UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS...

46
1 UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE PÓS-GRADUAÇÃO EM TECNOLOGIAS PARA O DESENVOLVIMENTO DE APLICAÇÕES WEB MODELO DE SEGURANÇA HIERÁRQUICO PARA WEB SITES FRANCISCO SPAETH BLUMENAU 2006

Transcript of UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS...

Page 1: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

1

UNIVERSIDADE REGIONAL DE BLUMENAU

CENTRO DE CIÊNCIAS EXATAS E NATURAIS

CURSO DE PÓS-GRADUAÇÃO EM TECNOLOGIAS PARA O DESENVOLVIMENTO

DE APLICAÇÕES WEB

MODELO DE SEGURANÇA HIERÁRQUICO PARA WEB SITES

FRANCISCO SPAETH

BLUMENAU

2006

Page 2: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

2

FRANCISCO SPAETH

MODELO DE SEGURANÇA HIERÁRQUICO PARA WEB SITES

Monografia apresentada ao Programa de Pós-Graduação em Tecnologias para o Desenvolvimento de Aplicações WEB do Centro de Ciências Exatas e Naturais da Universidade Regional de Blumenau, como requisito parcial para a obtenção do grau de Especialista em Informática.

Prof. Ms. Francisco Adell Péricas – Orientador

BLUMENAU

2006

Page 3: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

3

MODELO DE SEGURANÇA HIERÁRQUICO PARA WEB SITES

Por

FRANCISCO SPAETH

Monografia aprovada para obtenção do grau de especialista, pela Banca examinadora formada por:

_________________________________________________ Presidente: Prof. Francisco Adell Pericas, MSc - Orientador, FURB

_________________________________________________ Membro: Prof.

_________________________________________________ Membro: Prof.

_________________________________________________ Membro: Prof.

Blumenau, fevereiro de 2006

Page 4: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

4

Resumo

Com o crescimento cada vez mais intenso da disposição de serviços em meio virtual,

principalmente a internet, vê-se uma necessidade de gerenciamento mais eficaz de acesso a estes

serviços. Sob este ponto de vista as plataformas de trabalho hoje já existentes implementam

alguns recursos muito úteis no quesito de verificação de acesso como é o caso do .Net e do Java.

Estas funções são muito úteis, porém com alguns limites. A criação de um modelo hierárquico de

segurança possibilita a criação de usuários herdáveis e a sobrescrita de permissões, por exemplo.

A criação de perfis e de usuários é uma questão de herança daí para frente. Os serviços que

podem ser acessados por usuários também são herdáveis podendo desta forma permitir acesso a

um serviço raiz e todos os serviços estendidos deste serão permitidos ao usuário. Também são

implementados dois tipos de análise quanto à verificação de acesso: uma centrada nos serviços e

outra nos usuários. A implementação do modelo proposto foi feita usando o PHP e metodologia

de programação orientação a objetos. Tendo um modelo de segurança como o apresentado neste

trabalho, desenvolvedores Web terão pouco trabalho quanto à verificação de acesso a serviços

por parte de usuários.

Page 5: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

5

Abstract

With the growth each time more intense of services in electronic way, specially in the internet,

it’s necessary a method more efficient to manage the access to these services. In this point of

view, some platforms of work existents implements some resources very useful to confirm the

access permission like .Net and Java. These functions are useful, but with some limits. The

creation of a security model structured in hierarchy makes possible to inherit users and overwrite

permissions, for example. Of this point in ahead, profiles and users are inherit structures (that a

user is a inherited form another user that can be considered a profile). The services that can be

access from users are inherited too, with this feature we can give permission to a root service, and

the user can access each service that extends from the service granted. In this model are

implemented two ways to verify the access of an user to a service: one centered in the service and

another one centered in the user. The model implementation was done using PHP and object

oriented programming methodology. Using a security model like this one, presented in this

document, web developers will have little work considering permission access to a service from a

user.

Page 6: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

6

Lista de Figuras

Figura 1: Template mestre para layout de uma página (HUSTED, 2004, p.313)....................... 14

Figura 2: Trechos do arquivo web.config do aplicativo exemplo (PLATT, 2002, p. 103)......... 16

Figura 3: Diagrama de Caso de Uso ........................................................................................... 24

Figura 4: Diagrama de Classes.................................................................................................... 26

Figura 5: Classes implementando as interfaces de acesso a dados. ............................................ 27

Figura 6: Diagrama de Atividade accessService (Usuário acessa serviço)................................. 28

Figura 7: Diagrama de Atividade isAccessibleFor (serviço é acessado por usuário) ................. 29

Figura 8: Diagrama de Seqüência para User (accessService)..................................................... 30

Figura 9: Diagrama de Seqüência para Service (isAccessibleFor) ............................................. 31

Figura 10: Exemplificação de Hierarquia de Usuários e Serviços................................................ 32

Figura 11: Código do método accessService da classe User ........................................................ 34

Figura 12: Código do método isAccessibleFor da classe Service................................................. 35

Figura 13: Exemplo do uso ........................................................................................................... 35

Figura 14: Exemplificação do uso do modelo junto a um cadastro de manutenção ..................... 36

Figura 15: Exemplo de página requisitando autenticação para acesso ao recurso solicitado. ...... 39

Figura 16: Exemplo de acesso ao menu por parte do administrador do website .......................... 40

Figura 17: Exemplo de acesso ao menu de gerenciamento por parte de um usuário comum....... 41

Figura 18: Manutenção de arquivos acessado por usuário com permissão de edição e exclusão 42

Figura 19: Manutenção de arquivos para usuário sem permissão para exclusão ou alteração ..... 43

Figura 20: Formulário para alteração do arquivo selecionado...................................................... 44

Page 7: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

7

Sumário

1 INTRODUÇÃO...................................................................................................................................................9

1.1 PROBLEMA DE PESQUISA ...........................................................................................................................10

1.2 QUESTÃO DE PESQUISA ..............................................................................................................................10

1.3 OBJETIVOS......................................................................................................................................................10

1.3.1 Geral ..................................................................................................................................................................10

1.3.2 Específicos.........................................................................................................................................................10

1.4 JUSTIFICATIVA ..............................................................................................................................................11

1.5 ESTRUTURA DO TRABALHO ......................................................................................................................11

2 REVISÃO BIBLIOGRÁFICA.........................................................................................................................13

2.1 ESTRUTURA DE APLICAÇÕES....................................................................................................................13

2.2 SEGURANÇA PARA APLICAÇÕES..............................................................................................................15

2.2.1 .Net ....................................................................................................................................................................15

2.2.2 Java ....................................................................................................................................................................17

2.2.3 PHP....................................................................................................................................................................19

2.3 ARMAZENAMENTO DE DADOS..................................................................................................................20

2.3.1 Base de Dados ...................................................................................................................................................20

2.3.2 XML ..................................................................................................................................................................21

2.4 QUALIDADE DE SOFTWARE .......................................................................................................................22

3 DESENVOLVIMENTO ...................................................................................................................................24

3.1 REQUISITOS DO SISTEMA ...........................................................................................................................24

3.2 MODELO DE SEGURANÇA PROPOSTO .....................................................................................................24

3.3 TECNOLOGIAS UTILIZADAS.......................................................................................................................33

3.3.1 Armazenamento de Dados .................................................................................................................................33

3.3.2 Linguagens de Programação..............................................................................................................................33

3.4 IMPLEMENTAÇÃO DO MODELO PROPOSTO...........................................................................................34

3.4.1 Integração com Aplicações já Desenvolvidas....................................................................................................35

Page 8: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

8

3.5 TESTES E VALIDAÇÕES ...............................................................................................................................37

3.5.1 Implementações reais com o modelo proposto ..................................................................................................38

4 CONCLUSÃO...................................................................................................................................................45

Page 9: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

9

1 Introdução

Como vemos todos os dias, cada vez mais os consumidores estão procurando

comodidade. As empresas para atingirem este consumidor em potencial dispõem serviços de

forma a atingir a expectativa deste consumidor, um dos meios pelos quais ela atinge o

consumidor é fazendo uso da internet. Dispondo em seu website um meio para comercio

eletrônico.

Ao ver que serviços dispostos no website facilitavam muito a interação com a

empresa, foram desenvolvidos também aplicativos para gerência da mesma, também dispostos no

website, originando então uma extranet que poderia se acessada pelos colaboradores da empresa

para gerenciamento da mesma, bem como pelos seus clientes e fornecedores para compras e

reabastecimento de matéria prima.

Sabemos que o conteúdo visualizado por um representante, cliente e um funcionário

precisam ser diferentes, definidas de acordo com a política de acesso a informação estipulados

pela empresa. Para tanto existem os sistemas de seguranças em websites, que atua na

autenticação do usuário e na autorização de acesso a informações.

O propósito do presente trabalho é apresentar a especificação e a implementação de

um modelo de segurança hierárquico para verificação de permissões de acesso a serviços e

recursos em aplicações, mais especificamente em aplicações web. Isto envolve a criação de um

método para facilitar a verificação de autorizações e negações concedidas entre usuários e

serviços extensíveis. Desta forma espera-se reduzir o custo de gerenciamento de permissões de

grandes aplicações e facilitar o entendimento de permissões concedidas e negadas por parte do

administrador.

Page 10: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

10

1.1 Problema de Pesquisa

Tendo que hoje a segurança quanto à verificação de acesso a serviços e recursos está

cada vez mais importante e mais específica, este trabalho tem como objetivos a pesquisa e o

desenvolvimento de um modelo hierárquico para verificação de permissão de acesso.

1.2 Questão de Pesquisa

As questões que dão rumo a este trabalho são:

• Que modelos de verificação de acesso são implementados nas plataformas de

desenvolvimento comuns atualmente como o .Net, o Java e o PHP?

• Existem formas de facilitar a verificação de acesso a recursos e serviços?

1.3 Objetivos

A seguir enunciam-se os objetivos geral e específico do presente trabalho.

1.3.1 Geral

O objetivo deste projeto é dispor um modelo de segurança e a sua implementação,

baseado em hierarquia, para controle de acesso a recursos a fim de facilitar o gerenciamento de

segurança de aplicações de grande porte voltadas à internet.

1.3.2 Específicos

Os objetivos específicos do trabalho são:

• Criar um modelo lógico flexível para armazenamento das políticas de acesso de

cada aplicação;

• Avaliar formas de armazenamento (XML e Banco de Dados);

• Desenvolver interfaces e classes básicas para o uso do modelo proposto;

Page 11: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

11

• Dispor meios para que possam ser implementados outros meios de recuperação de

dados afim de não atrelar especificamente o projeto a um banco de dados;

• Estipular a melhor maneira de incorporar este modelo a projetos já desenvolvidos.

1.4 Justificativa

Um sistema de gerenciamento de conteúdo pode ser utilizado sobre o próprio serviço

de internet mediante o acesso desde uma extranet de uma empresa. Estas permissões de acesso

são verificadas a partir de uma engenharia de segurança que pode estar validando o usuário que

está acessando ou ainda os perfis em que o usuário está enquadrado. O comum para estas

engenharias é impor um modelo dispondo serviços (áreas de gerenciamento), usuários (pessoas

autorizadas a acessar certos serviços) e perfis (grupos de serviços que podem estar atrelados a

pessoas). Além disso, as permissões de um com o outro podem ser de permissão ou negação.

Sem um mecanismo de segurança correspondendo ao menos às características acima,

fica inviável o controle de um site Web relativamente grande pelo trabalho criado no

gerenciamento de permissões/usuários.

Agora, mais do que nunca, precisa-se flexibilidade quanto à verificação de acesso a

serviços disponibilizados. A maioria dos serviços tem duas faces: visualização e manutenção. A

visualização exibe os dados para o cliente web e a manutenção é o que envolve a manipulação de

dados. Nem todos que podem ver os dados, podem alterá-los. Desta forma cresce o número de

associações entre serviços, usuários e perfis.

1.5 Estrutura do Trabalho

Para atingir o objetivo proposto, o trabalho divide-se em duas partes: a revisão

bibliográfica e o desenvolvimento.

Page 12: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

12

Na revisão bibliográfica dá-se foco as tecnologias que já possuem uma engenharia de

segurança formalizada como o Java e a plataforma .Net. Também fundamentamos formas de

estruturar um website com a finalidade de apresentarmos no desenvolvimento do modelo formas

a integrar as funcionalidades desenvolvidas as aplicações existentes. Outro ponto tratado na

revisão bibliográfica é o meio de armazenamento que pode ser utilizado junto à engenharia

desenvolvida como é o caso do banco de dados e XML, e sobre a qualidade de software quanto à

confiabilidade de sistemas computacionais atrelado a requisitos do sistema.

No capítulo de Desenvolvimento são apresentados os requisitos do sistema,

formulado o seu modelo, definidas as tecnologias a serem usadas a fim de desenvolver a parte

prática e apresentada a forma de integrar o modelo desenvolvido a aplicações já operando, de

forma que sejam feitas alterações pequenas, não afetando assim a engenharia do software em si.

Page 13: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

13

2 Revisão Bibliográfica

2.1 Estrutura de Aplicações

Conforme Wankyu (2001, p. 178), um dos meios para facilitar o desenvolvimento de

aplicativos maiores é através do uso da modularização, um processo para se pensar nas tarefas

que precisam ser desempenhadas pela aplicação e subdividi-las em várias outras menores. A

explicação dele para tal ação é “É mais fácil de testar se só vai haver uma tarefa desempenhada

em uma parte específica do programa”.

Ainda conforme Wankyu (2001, p. 178):

[...] Se um módulo desempenha uma tarefa em específica, então você pode chama-lo toda vez que precisar desempenhar aquela tarefa. Você pode imaginar esses módulos como pequenas caixas pretas, onde você coloca e retira dados e, contanto que eles estejam corretos, você não precisa se preocupar com o que acontece do lado de dentro. Em PHP (e em qualquer outra linguagem), o nome dado a um “módulo” de código como este é função.

Este processo de subdividir a aplicação em módulos (partes menores) vale tanto para

a lógica da aplicação (camada de controle e modelo) quanto para a parte de visualização (layout

propriamente dito) como explana Husted (2004, p. 310):

Uma abordagem para separar o layout do conteúdo é o uso de inclusões JSP dinâmicas. A especificação JSP fornece inclusões estáticas e dinâmicas. A ação JSP padrão para inclusão dinâmica é <jsp:include>.

Fazemos uso de inclusões dinâmicas para dividir a página do servidor em vários fragmentos, cada um com seu próprio serviço a fazer. Um template de segundo plano pode definir o formato default e o layout e os fragmentos da página podem ser incluídos durante a execução para fornecer o conteúdo. Uma inclusão dinâmica envolve a saída da página incluída na página original. Age como um interruptor que move o processamento para um fragmento de página e então de volta para quem chama. [...]

Desta forma pode-se concluir que um meio interessante para fazer um layout básico

de uma página que tenha algumas áreas comuns, como menu, cabeçalho, rodapé e conteúdo, seria

criar um arquivo de menu, outro de cabeçalho, outro rodapé e um quarto que seria responsável

pela montagem da página, que nada mais faz do que executar o include do cabeçalho, do menu,

Page 14: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

14

da página-conteúdo requisitada e do cabeçalho para formar a resposta da requisição. A página-

conteúdo que se refere anteriormente é o conteúdo a ser disposto na página conforme a

requisição, análoga à página original citado por Husted (2004).

Figura 1: Template mestre para layout de uma página (HUSTED, 2004, p.313)

Pode-se concluir também que a página original (página-conteúdo) é uma das páginas

que poderá efetuar as ações de acordo com o requisitado pelo usuário no caso de manutenções

cadastrais, alterações de dados, navegação, entre outros. É normal então que neste ponto ocorram

verificações de permissões para definir se o usuário pode ou não executar determinada tarefa ou

então acessar um recurso específico. Para ilustrar esta conclusão cita-se um trecho de Platt (2002,

p. 127):

O código da página .aspx pode fazer sua própria autorização, por meio do objeto intrínseco denominado User. Esse objeto contém um método chamado IsInRole, o qual informa se o usuário é membro do grupo administrativo que examinamos anteriormente.

Como se pode observar deixa-se meios para que ocorra a verificação na própria

lógica (lógica da página-conteúdo). Nesta citação, Platt menciona o termo autorização que é

fundamentado no item 2.2.1 do presente trabalho.

layout.jsp

header.jsp

details.jsp

footer.jsp

Detalhes do Item

Commodore 1541 Capacidade 180K Custo: $200 Alinhado?: Algumas vezes

[Main] [Logoff]

Page 15: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

15

2.2 Segurança para Aplicações

Platt define que a segurança comum para várias plataformas é a de dois tempos:

autenticação e autorização.

Platt (2002, p. 111) define autenticação como:

[...] Autenticar um usuário geralmente toma a forma de examinar algum tipo de credencial apresentada pelo usuário, algumas vezes combinada diretamente entre duas partes, como um PIN ou uma senha; algumas vezes emitida por um terceiro em que ambos confiam, tal como uma licença de motorista ou um passaporte. Se as credenciais são satisfatórias para o servidor, este sabe quem o usuário é e pode usar sua lógica interna para determinar que ações o usuário pode realizar. Um usuário que não é autenticado é chamado de usuário anônimo. Isso não significa necessariamente que ele não possa ter acesso a nada do site Web, mas significa que ele pode ter acesso somente aos recursos que os projetistas deixaram disponíveis para os usuários anônimos – talvez verificar a programação de uma linha aérea, mas sem resgatar algum prêmio.

Pode-se verificar por meio do citado acima que autenticação nada mais é do que a

engenharia criada em um sistema para que ele confira o usuário e as senhas informadas.

Quanto à autorização, conforme Platt (2002, p. 121):

Uma vez concluído o processo de autenticação, nós sabemos quem o usuário é ou se ele é anônimo. Agora precisamos decidir se o usuário pode ver a página que ele está solicitando. Isso se chama autorização.

Agora que foram definidos os termos para tratar de segurança propriamente dito, será

analisada a plataforma .Net e Java, descrevendo uma alternativa para executar uma função

semelhante usando o PHP.

2.2.1 .Net

Como expõe Platt (2002, p. 113), existem quatro modos de autenticação no ASP.Net:

nenhum, pelo Windows (usada autenticação padrão do Windows no Internet Information Server),

por Forms (neste caso o ASP.Net verifica nos cabeçalhos HTTP por um cookie de autenticação,

ou, se não houver, o ASP.Net redirecionará para a página de autenticação configurada) e por

Passport (mesma idéia do Forms exceto que a credencial, ou cookie emitido, é fornecido pelo

Page 16: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

16

serviço Passport da Microsoft). Desta forma, a autenticação também é auxiliada pela própria

plataforma.

Quanto à autorização, as aplicações .Net possuem mecanismos extremamente simples

para armazenar estas informações, conforme Platt (2002, p. 122) descreve:

O ASP.NET contém um bom suporte para controlar o acesso a páginas ASPX. Pode-se limitar administrativamente o acesso das páginas por meio de entradas nos arquivos web.config do aplicativo [...]

O arquivo web.config é o arquivo de configuração da aplicação que, conforme Platt

(2002, p. 102):

[...] Cada aplicativo armazena suas informações de gerenciamento da configuração ASP.Net em um arquivo chamado web.config, o qual é armazenado no diretório do próprio aplicativo. Cada arquivo conte, informações sobre a configuração expressa em um vocabulário XML particular.

Um bom exemplo do que se pode fazer usando o web.config está apresentado na

Figura 2.

<?xml version=”1.0” encoding=”utf-8”?> <configuration> <system.web> <!--DYNAMIC DEBUG COMPILATION Set compilation debug=”true” to enable ASPX debugging. Otherwise, setting this value to false will improve Runtime performance of this application. --> <compilation defaultLanguage=”vb” debug=”true”/> <!—CUSTOM ERROR MESSAGE Set customErrors mode=”true” or “RemoteOnly” to enable custom error messages, “Off” to disable. Add <error> tags for each of the errors you want to handle. --> <customErrors mode=”RemoteOnly” /> </system.web> </configuration>

Figura 2: Trechos do arquivo web.config do aplicativo exemplo (PLATT, 2002, p. 103)

Pode-se também trabalhar com diversas configurações em uma aplicação para

diferentes diretórios, usando um web.config para cada diretório específico, como explana Platt

(2002, p. 103):

Page 17: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

17

Os arquivo web.config também podem residir em vários subdiretórios de um aplicativo. Cada arquivo web.config controla a operação de páginas contidas em seu diretório e todos os subdiretórios, a menos que haja outro arquivo no subdiretório.

Tomando como base esta citação, pode-se concluir que diversas diretivas de

configuração da aplicação podem estar “espalhadas” nos diversos diretórios da aplicação. Para

segurança, o ideal seria estar tudo centrado para uma melhor gerência, mas vale lembrar que

usando o .Net pode-se centrar as configurações de segurança mesmo possibilitando a

fragmentação das mesmas.

Como já fora citado anteriormente, pode-se definir as configurações de autenticação e

autorização nos arquivos web.config da aplicação como demonstra Platt (2002, p. 122) em um de

seus exemplos:

<authorization> <allow users=”Simba” roles=”Doctors” /> <deny users=”*”> </authorization>

A sessão <authorization> contém elementos <allow> (permitir) e <deny> (recusar)

que permitem ou não os usuários e membros dos grupos de usuários especificados acessar

páginas dos diretórios nos quais os arquivos web.config se aplicam.

Neste exemplo fica claro o trabalho do ASP.Net usando autorizações. Deve-se dar

especial atenção sobre os dois tipos de elementos existentes dentro da tag authorization, o allow

e deny, que são equivalentes ao grant e revoke em um sistema gerenciador de base de dados.

2.2.2 Java

Para introduzir o conceito imposto pelo módulo de segurança, observa-se o que diz

Kurniawan (2002, p. 226):

O conceito de principal é simples. Você pode pensar em principals como usuários. Basicamente, um principal é uma entidade. Ele pode ser um indivíduo ou outro tipo de entidade. “Principal” e “usuário” são intercambiáveis usados para referenciar uma identidade.

Page 18: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

18

Uma função é um grupo abstrato de usuários. Ela se refere mais a uma posição do que um indivíduo. Você pode pensar em uma função como um grupo. Como tal um usuário pode ocupar uma ou mais funções.

O conceito introduzido pelo sistema de segurança usada pelo Tomcat (módulo que

pode incorporar o Java ao projeto Apache para servir aplicações Java) é simples. Este sistema é

centrado em usuários (entidades), cada qual possuindo acesso a várias funções que podem ser

consideradas ações para que se possa criar correlação entre o glossário de Kurniawan e deste

trabalho.

Estas informações de segurança podem ser armazenadas em um arquivo XML com

um formato parecido com o exemplo exposto por Kurniawan (2002, p. 337):

<tomcat-users> <user name=“Joe” password=“pwd” roles=“marketingManager”/> <user name=“Peter” password=“0192” roles=“HRManager”/> <user name=“MrDirector” password=“humblepine” roles=“marketingManager,HRManager”/> </tomcat-users>

Além da possibilidade de criar regras, pode-se definir permissões para recursos

usando o que se chama de Security-Constraint (regras de segurança), que pode restringir acesso a

recursos sem que seja escrita uma linha de código. Para exemplificar o uso de regras de

segurança, seja o exemplo criado por Kurniawan (2002, p. 338):

[...] <security-constraint> <web-resource-collection> <web-resource-name> Restricted Area </web-resource-name> <url-pattern>/servlet/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>manager</role-name> </auth-constraint> </security-constraint> [...]

No exemplo cria-se uma regra (security-constraint), onde são inseridos os recursos

gerenciados (web-resource-collection). Estes recursos gerenciados recebem um nome (no

Page 19: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

19

exemplo o nome dado foi “Restricted Área” pelo valor da tag web-resource-name). Depois são

informados os padrões de URLs que serão verificadas por esta permissão (url-pattern), e esta

regra deve atuar sobre determinadas funções (auth-constraint).

2.2.3 PHP

Analisada a documentação do PHP constata-se que não existe nenhum conjunto de

funções capazes de fornecer segurança baseada em regras como é o caso do Java ou ainda do

.Net. Fica então como uma possível solução o uso do htaccess do Apache conforme a idéia

exposta por Marcelo (2003, p. 53).

A utilização do htaccess fica restrita às condições impostas pela configuração do

Apache, onde se pode integrar a autenticação junto a uma lista de usuário/senha conforme

dispões Marcelo (2003).

Algumas chaves de configuração podem ser usadas na configuração de acesso a um

determinado recurso usando o apache. A chave AuthName configura a mensagem que aparecerá

ao usuário ao tentar acessar o recurso afim de informá-lo que área está tentando acessar.

AuthType define a forma como deve ser feito o acesso. AuthUserFile trata do arquivo de usuários

e senhas. Require user define quais os usuários (cadastrados no AuthUserFile) podem acessar

aquele recurso.

Conforme Marcelo (2003, p. 61) existe ainda a possibilidade de criar autorização por

grupo. Às vezes, em sites pagos, é interessante criar um arquivo com a listagem dos usuários.

Para isto basta alterar o nosso htaccess com os seguintes parâmetros:

AuthName “Diretório seguro BufferOverflow” AuthTyoe Basic AuthUserFile /home/bufferoverflow/public_html/.senha AuthGroupFile /home/bufferoverflow/public_html/.grupo Require group usuarios

Page 20: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

20

Os parâmetros AuthGroup e o Require group é que habilitam os grupo de usuário.

Para criarmos o arquivo de grupos, utilize um editor de texto como o VI e crie o arquivo .grupo,

conforme a sintaxe adiante:

Usuários: amarcelo salbrum

A criação desta estrutura acaba possibilitando a criação de um meio seguro para

executar uma aplicação Web, uma vez que o apache controla acesso aos recursos.

Esta solução não tem o mesmo nível das soluções impostas pelo .Net ou Java, uma

vez que é a segurança fornecida pelo servidor Web. Uma analogia às outras plataformas (.Net e

Java) seria o mesmo que dizer que a segurança de uma aplicação .Net seria fornecida pelo

servidor Web (geralmente Internet Information Server da Microsoft) o que é perfeitamente

possível.

2.3 Armazenamento de Dados

2.3.1 Base de Dados

De acordo com Deitel (2003, p. 774), um banco de dados é uma coleção integrada de

dados. Existem várias estratégias diferentes para organizar dados em um banco de dado, para

facilitar o acesso e a manipulação dos dados.

Ainda conforme Deitel (2003), os bancos de dados mais populares são relacionais e

quase em sua totalidade usam SQL para executar consultas e manipulação de estruturas e dados.

De acordo com O’Brien (2004, p.119), um banco de dados possibilita que diferentes

programas aplicativos do usuário acessem a mesma base de dados.

A visão de O’Brien (2004) permite concluir que o banco de dados se torna muito útil

por ser uma camada a mais, sem nenhuma relação direta com as regras de aplicação, servindo

como repositório de dados onde eles são armazenados e recuperados.

Page 21: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

21

Para abstrair o usuário da biblioteca de funções específicas de cada banco existem

desenvolvedores que criam interfaces de acesso a banco de dados, permitindo desta maneira

utilização de um conjunto comum de funções para operar bancos de dados distintos, conforme

Deitel (2003, p. 774):

A Database Interface (DBI) de Perl oferece meios de acessar bancos de dados relacionais a partir de programas Perl. Existem muitas implementações diferentes de banco de dados relacionais (p. ex., MySQL, Microsoft Access, Oracle, etc.). Um programa de software – chamado de driver – ajuda os programas a acessar o banco de dados. Cada implementação de banco de dados exige seu próprio driver e cada driver pode ter uma sintaxe diferente para seu uso em um programa. Para facilitar o uso de todos este banco de dados diferentes, criou-se uma interface para oferecer acesso uniforme a todos os bancos de dados. Esta interface é conhecida como DBI.

Assim como em Perl , há DBIs para outras linguagens. Para PHP também pode-se

encontrar meios de criar uma DBI própria, como trata Hughes (2001) em seu livro.

2.3.2 XML

Como o banco de dados, XML também é usado para armazenar dados, conforme

Deitel (2003, p. 724) expõe:

O XML é uma tecnologia aberta, portável, amplamente suportada (isto é, tecnologia não-proprietária) para descrever dados. O XML está se tornando o padrão para armazenar dados intercambiados entre aplicativos. Usando XML os autores de documentos podem descrever qualquer tipo de dados, incluindo fórmulas matemáticas, instruções e configurações de software, música, receitas e relatórios financeiros. Os documentos XML podem ser lidos por seres humanos e máquinas.

Levando em conta a citação acima, há uma vantagem quanto ao XML sobre os

bancos de dados na configuração de aplicações. Em um banco de dados relacional o que é preciso

para alterar um parâmetro de configuração é abrir um cliente que acesse o banco de dados

executar alguns comandos SQL e então os parâmetros estarão alterados. Já em um arquivo XML

bem formado, usuários que entendam um pouco do domínio da aplicação conseguirão ler o

arquivo e alterar as configurações de maneira simples, sem precisar executar um cliente que

permita a entrada de comandos SQL.

Page 22: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

22

2.4 Qualidade de Software

A definição de qualidade de acordo com Weinberg (1994, p. 141) é: “Qualidade é

valor para alguma pessoa.”. Outra sentença relevante que exprime de forma simples como criar

com qualidade é: “A verdadeira melhoria da qualidade sempre se inicia com o saber do que os

seus clientes querem”.

As sentenças expostas estão relacionadas ao desenvolvimento de qualquer produto,

inclusive software. De acordo com Weinberg: “se você não sabe o que seus clientes querem não

estará pronto para garantir que seus passos de melhoria de qualidade sejam passos de melhoria de

qualidade”.

Pode-se desta forma deduzir que a forma mais simples de tratar qualidade em

desenvolvimento de software é definir pontos a serem atingidos no desenvolvimento, servindo

como objetivos ou uma espécie de linha guia para que os requisitos do cliente sejam sanados

atingindo o desenvolvimento do software desejado pelo cliente, desta forma obtendo qualidade.

Quando se trata da segurança de aplicativos, principalmente quanto a acesso, está-se

falando de confiabilidade, que de acordo com Gustafson (2003, p. 99) é: “Confiabilidade é a

probabilidade de o software não falhar em um período de tempo específico”.

De acordo com Musa (1990, apud Peters 2001, p.499): “A confiabilidade é

provavelmente a característica mais importante do conceito de qualidade de software. Ela se

preocupa com a qualidade com que o software é capaz de atender as necessidades do cliente”.

Desta forma pode-se claramente definir que confiabilidade de software é

simplesmente efetuar as funcionalidades de acordo com os requisitados do cliente.

De acordo com Coward (1997, apud Peters 2001, p. 377), “O objetivo principal do

teste de software é tornar o software confiável”. Desta forma, para se atingir qualidade de

Page 23: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

23

software precisa-se aplicar alguns testes sobre o software desenvolvido. Um meio de efetuar as

verificações de funcionalidade de um software é por meio de uma checklist que, de acordo com

Gustafson (2003, 0. 99), é uma lista de itens que devem ser verificados durante a revisão.

Também destaca a vantagem do uso de uma checklist uma vez que a atenção do revisor é focada

em problemas potenciais.

Page 24: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

24

3 Desenvolvimento

3.1 Requisitos do Sistema

De acordo com a definição dos objetivos o modelo deve verificar permissões de

acesso a recursos, que podem envolver funções específicas, serviços, áreas visíveis no site,

arquivos dentre outros. Basicamente ele fará a busca em uma árvore de forma recursiva a fim de

estabelecer se o usuário autenticado pode ou não acessar estes recursos.

Este modelo também se apresenta flexível o suficiente a ponto de se poder

implementar acesso a dados de outras fontes (banco de dados).

3.2 Modelo de Segurança Proposto

A seguir apresenta-se a modelagem UML usando os diagramas de caso de uso, de

classes, de atividade e de seqüência para o resultado proposto.

Figura 3: Diagrama de Caso de Uso

O diagrama da Figura 3 mostra como o script atuará a fim de verificar a autorização

de acesso a serviços e recursos que sejam convenientes à verificação em tempo de execução.

Define-se que um serviço pode ser um recurso a ser solicitado (como é o caso de

verificar se o usuário pode acessar determinada página) ou uma ação a ser executada (como por

exemplo, em um cadastro onde o usuário deseja remover um registro).

Page 25: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

25

Desta forma, a verificação ocorre de duas formas:

1. verificando se o usuário tem acesso a determinado serviço (centrado no usuário);

2. verificando se o serviço pode ser acessado por determinado usuário (centrado no

serviço).

O objetivo de existir duas formas de verificação é que a aplicação pode analisar as

permissões de dois modos como citadas acima, uma centrada no usuário e outra no serviço.

Análise centrada no usuário tem por finalidade verificar se existe alguma permissão

definida entre o serviço requisitado e o usuário em questão. Se não houver é verificado o serviço

ascendente ao solicitado até que se chegue a raiz. Ao chegar na raiz é selecionado o usuário

ascendente e verificado os serviços até a raiz para verificar se existe alguma definição de acesso.

Este processo é feito até achar alguma associação ou fim das possibilidades.

Em contrapartida a análise centrada no serviço faz o contrário: ele verifica primeiro

uma associação do usuário em questão com o serviço requisitado se não houver é feito a análise

de associações de usuários ascendentes ao serviço requisitado, ao chegar a raiz dos usuários

ascendentes é tomado o serviço ascendente e feito o teste com os usuários ascendentes ao em

questão até o término das possibilidades ou encontrar uma associação.

O uso de dois métodos tem a intenção de flexibilizar a análise em aplicações

diferentes, podendo-se dar foco ao objeto desejado. Os métodos disponíveis são: isAccessibleFor

da classe Service e accessService da classe User.

Definido o objetivo e a funcionalidade do modelo pode-se definir o digrama de

classes.

Existirão no mínimo 3 classes (Usuário, Serviço e AssociaçãoUsuárioServiço). Estas

três classes farão a interface de atividade com o script.

Page 26: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

26

Sendo um dos objetivos do trabalho definir um modelo que seja flexível a ponto de

trabalhar com bancos de dados relacionais tanto quanto XML ou mesmo arquivos textos, a

solução encontrada é a de criar interfaces com pequenos métodos, os quais fornecem dados

(registros) para as classes que os usam de acordo com a necessidade das mesmas. Então, para

cada uma das três classes primárias, foi definida sua interface de fonte de dados (DataSource).

Figura 4: Diagrama de Classes

As interfaces de acesso a dados foram estipuladas para que não precisasse criar uma

DBI (Data Base Interface) para acessar dados de fontes diferentes da implementada para teste

(MySQL), desta forma fica simples implementar para outras fontes de dados.

Depois de implementadas as interfaces, o que se precisa fazer é passar estas interfaces

implementadas como parâmetro para os métodos nas três classes bases (User, Service e

UserServiceAtt), para assim fazer o uso destas interfaces implementadas e não precisar de

nenhuma fonte extra de dados.

Page 27: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

27

Para os testes efetuados com a aplicação foram implementadas as interfaces em

classes de acesso a dados usando o MySQL como fonte de dados, conforme mostra o modelo

abaixo.

Figura 5: Classes implementando as interfaces de acesso a dados.

A estrutura formulada foi basicamente uma classe de conexão com o MySQL para

armazenar a conexão efetuada com um método getConnection seguindo o padrão singleTone do

GoF.

As classes que implementam os métodos das interfaces definidas pelo projeto fazem,

basicamente, seleções sobre as tabelas na base de dados do MySQL.

Os dois principais métodos, como dispostos no diagrama de casos de uso (Figura 3)

são accessService (usuário acessa serviço) da classe User e isAccessibleFor (serviço pode ser

acessado por usuário) da classe Service. O diagrama de atividade para cada um deles é disposto a

seguir.

Page 28: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

28

Figura 6: Diagrama de Atividade accessService (Usuário acessa serviço)

O fluxo é relativamente simples: invoca-se o método accessService passando como

parâmetro a classe de fonte de dados aos serviços, a classe de fonte de dados a associações de

serviços a usuários, o serviço sendo acessado e se é extensível ou não.

A classe de fonte de dados de serviço, é qualquer classe que implemente

IServiceDataSource. Esta fornecerá os dados para a carga de serviços a serem consultados, a

mesma finalidade tem o parâmetro de fonte de dados de associação de usuário com serviço que é

qualquer fonte de dados do tipo IUserServiceAttDataSource. É informado também o nome do

serviço e se a verificação é extensível ou não, por padrão a verificação sempre é extensível.

O fluxo é: inicia-se a atividade verificando se existe algum relacionamento direto

entre o usuário e o serviço em questão se o tiver retorna-se verdadeiro ou falso de acordo com a

permissão, caso contrário continua o fluxo de atividades que verifica o parâmetro extensible que

indica se deve ou não estender a pesquisa aos usuários de forma recursiva. Uma vez que

extensible é verdadeiro ele faz além da verificação normal, a verificação se um dos usuários

Page 29: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

29

ascendentes não tem permissão de acesso, a verificação contrária, isto é verifica se um dos

serviços ascendente ao em questão não pode acessado pelo usuário criando desta forma um

estouro de pilha. O primeiro fator encontrado de associação (que pode ser permitido, GRANT, ou

negado, REVOKE) é retornado ao invocador do método, como resultado da função.

Pelo outro prisma, onde se invoca o método isAccessibleFor do serviço é feito o

mesmo processo porém iniciando do outro lado (no caso o serviço), como demonstra o diagrama

de atividade abaixo.

Figura 7: Diagrama de Atividade isAccessibleFor (serviço é acessado por usuário)

Agora que se definiram os diagramas de classe e de atividade pode-se estipular que

seqüência efetuar de modo a atingir o resultado desejado. Para o método accessService da classe

User há a seguinte seqüência:

Page 30: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

30

Figura 8: Diagrama de Seqüência para User (accessService)

Deixa-se claro aqui então, que toda verificação de permissão será obtida

instanciando-se uma classe User, depois disso será chamado o método accessService deste objeto

que por sua vez criará um objeto da classe UserServiceAtt levando em consideração o serviço que

está requisitando acesso e o usuário requerente. Se o objeto pode ser criado (isto significa que

existe uma relação direta sem que seja preciso uma consulta aos usuários e serviços ascendentes),

o retorno será conforme ao tipo de associação (GRANT para permissão e REVOKE para

negação), caso contrário instancia-se um objeto da classe Service levando em conta o serviço que

se queira acessar. Para o serviço criado será invocado o método isAccessibleFor passando como

parâmetro às classes de DataSource e o usuário que esteja requisitando o acesso, se alguma

associação de serviço e usuário for encontrada retorna-se o valor conforme a associação. Logo

Page 31: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

31

após criar o usuário pai (se existir) e fizer a mesma verificação (invocação do método

accessService) para assim verificar se o pai deste usuário não possui alguma associação uma vez

que o filho não a tenha.

A operação que envolve a criação de uma instância do objeto Service tem como

objetivo verificar se nenhum dos serviços superiores àquele a qual ele pertence está definido, e se

este estiver o retorno será a definição estabelecida.

A mesma lógica é aplicada ao método isAccessibleFor da classe Serviço que segue a

seqüência abaixo:

Figura 9: Diagrama de Seqüência para Service (isAccessibleFor)

O diagrama de seqüência anterior apresenta as etapas semelhantes ao exposto no

diagrama de accessService da classe User (F0igura 8), contudo o método principal é invocado ao

objeto instanciado da classe Service que fará a verificação da existência de um relacionamento

Page 32: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

32

direto do serviço com o usuário em questão, caso não o tenha, será feito primeiro uma verificação

se nenhum dos ascendentes do usuário em questão o possui e depois partir para os ascendentes

dos objetos Service.

O propósito de existirem duas lógicas distintas, como se pode observar nos diagramas

de seqüência (Figuras 8 e 9) é a flexibilidade, assim pode-se centrar a decisão sobre o usuário no

caso da situação descrita no diagrama da Figura 9 ou centrada no serviço como fora exposto na

Figura 8.

Para demonstrar a distinção entre uma lógica e outra, considere a figura a seguir onde

se demonstra a aplicação das duas lógicas.

Figura 10: Exemplificação de Hierarquia de Usuários e Serviços

Supondo que neste caso se tenha definido permissão para o usuário nomeado de

Analista não conseguir acessar o serviço cujo nome é Manutenção, define-se também que o

Sênior possui permissão para acesso do serviço nomeado de Cadastro de Usuário.

Baseado nessas definições, fazendo as verificações usando objetos instanciados da

classe User, verifica-se que o usuário Sênior não acessa manutenção, mas se invocarmos o

método da classe Serviço perguntando se o serviço de manutenção pode ser acessado pelo usuário

Sênior o retorno será positivo.

Esta flexibilidade é exposta para que se possa definir se a análise de permissão será

feita centrada nos usuários ou nos serviços. A diferença é que centrada no usuário a verificação é

Page 33: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

33

feita criando uma instância do serviço desejado e verificado se o usuário ou os superusuários do

usuário em questão possui algum valor de associação (GRANT ou REVOKE). Se o tiver,

estabelecem aquele como sendo a resposta caso contrário fazem o mesmo teste com o

superserviço até chegar ao serviço raiz. De outra forma, centrado no serviço, cria-se a instância

do usuário desejado e verifica todos os superserviços do serviço em questão, a fim de definir uma

resposta, se esta não existir cria-se o superusuário e faz-se o teste até chegar à raiz.

3.3 Tecnologias Utilizadas

3.3.1 Armazenamento de Dados

O sistema para armazenamento de dados usado na aplicação exemplo foi o MySQL

conforme exposto no diagrama de classes das classes que implementaram as interfaces tipo

DataSources no item 3.1.

O motivo pelo qual os testes foram feitos com a base de dados MySQL foi da

disponibilidade dos softwares envolvidos já configurados.

Nada proíbe de implementar as interfaces em classes que façam acesso a uma outra

base de dados como Oracle, MS SQL, DB2 ou Interbase. Soluções ainda mais simples como

XML ou arquivos textos separados por vírgula também podem ser implementadas.

3.3.2 Linguagens de Programação

As classes de verificação de acesso foram escritas inicialmente em PHP versão 4, mas

com o decorrer do trabalho notou-se que esta não sanava todas as necessidades principalmente

com métodos estáticos, propriedades estáticas e o conceito de interface, uma vez que a versão 4

do PHP não disponibiliza tais propriedades (um meio para contornar esta situação seria a criação

de classes que seriam herdadas usando um pouco de polimorfismo, obtendo o resultado esperado

mas sem criar um modelo condizente ao sugerido), levando-se em conta este item optou-se pela

Page 34: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

34

versão 5 da plataforma, que tem um ambiente mais robusto no quesito orientação a objeto onde

foram desenvolvidas todas as interfaces e classes da maneira proposta inicialmente.

É importante ressaltar que é perfeitamente possível a criação do mesmo modelo

usando a versão 4 do PHP, mas é aconselhável um ambiente que possibilite ao menos a

implementação dos conceitos de herança (o que já existe na versão 4), de interface e de

encapsulamento, como por exemplo: C++, Java, C#, Object Pascal e outras.

3.4 Implementação do Modelo Proposto

A implementação do modelo foi feita em PHP por uma razão muito simples: existem

meios de verificar as permissões de acesso usando Java e .Net nas próprias plataformas o que não

acontece com PHP, por isso achou-se mais interessante a implementação de uma ferramenta

deste tipo para esta plataforma.

Inicialmente foram estipuladas as classes a serem escritas conforme se definiu no

diagrama de classes no presente trabalho.

Criadas as classes partiu-se para a lógica dos métodos destas classes, nos quais

destacam-se os dois principais métodos (isAccessibleFor da classe Service, e accessService da

classe User).

Figura 11: Código do método accessService da classe User

Page 35: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

35

Figura 12: Código do método isAccessibleFor da classe Service

3.4.1 Integração com Aplicações já Desenvolvidas

Tendo em vista que o modelo propusera a verificação da permissão de acesso de um

usuário a um serviço ou o contrário, considerou-se que seria interessante que o usuário pudesse

efetuar esta verificação usando somente uma linha de código.

Como as classes exigem entradas de objetos como parâmetros, apresenta-se um

exemplo que de como pode ser ou não exibido determinado item em um menu fictício.

Figura 13: Exemplo do uso

Na Figura 13, atribuiu-se à propriedade active do objeto menuItem,o valor lógico

retornado da verificação de acesso do usuário “Administrador” ao serviço “Cadastro de

Usuários”.

Neste exemplo pode-se ter uma idéia ainda do que é possível fazer, que fica ainda

mais interessante quanto se tem um problema onde usuários podem ter privilégios distintos para

uma mesma função.

Cita-se como exemplo para o problema exposto no parágrafo acima o caso de

manutenção de dados de um cadastro onde é possível existir usuários que podem somente inserir

menuItem->active = User::getUser( new userDataSourceMySQL(), "Administrador" )->accessService( new UserServiceAttDataSourceMySQL(), "Cadastro de Usuários" ;

Page 36: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

36

registros, outros inserir e alterar, outros ainda somente excluir e assim por diante. No código

abaixo se vê a solução deste problema aplicando o modelo proposto neste trabalho.

Figura 14: Exemplificação do uso do modelo junto a um cadastro de manutenção

Tendo definido que o usuário pode acessar todo cadastro de usuário e definido que

este usuário não tem acesso à exclusão, criando assim uma relação de permissão e uma relação de

negação de acesso, será exibido o item no menu de gerenciamento como exposto na Figura 12

function processOperation($operation,$data) { switch ($operation) { case INSERIR: if (User::getUser(new userDataSourceMySQL(), "Administrador" )->accessService( new UserServiceAttDataSourceMySQL(), "Inserir Cadastro de Usuários" )) return processInsertAction($data); break; case ALTERAR: if (User::getUser(new userDataSourceMySQL(), "Administrador" )->accessService( new UserServiceAttDataSourceMySQL(), "Alterar Cadastro de Usuários" )) return processUpdateAction($data); break; case EXCLUIR: if (User::getUser(new userDataSourceMySQL(), "Administrador" )->accessService( new UserServiceAttDataSourceMySQL(), "Excluir Cadastro de Usuários" )) return processDeleteAction($data); break; } return false; }

Page 37: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

37

(por ele possuir o acesso), mas ao executar a exclusão de usuários cadastrados a resposta será

falsa, diferente a verificação da permissão de inserção ou alteração que retornará verdadeiro.

3.5 Testes e Validações

Baseada sobre a fundamentação de qualidade de software temos que um meio para

efetuar testes sobre um modelo computacional é a criação de uma checklist para efetuar os

devidos testes.

Para tanto criou-se uma base de dados com as possibilidades existentes para a

aplicação em uma situação real, isto inclui:

• atribuição de permissões diretas;

• atribuição de negação diretas;

• atribuição de permissão a subitens de itens negados;

• atribuição de negação a subitens de itens permitidos;

Para testar todas as possibilidades de forma padronizada criou-se um checklist que

prevê todas as possibilidades reais existentes sobre um software. Este checklist contém as

seguintes prerrogativas:

• Verificação se o usuário possui acesso a serviços;

• Verificação se o serviço pode ser acessado pelo usuários;

• Verificação se os usuários descendentes podem acessar os serviços atribuído

ao usuário;

• Verificação se serviços descendentes podem ser acessados pelo usuário

atribuído;

• Verificação se usuários descendentes podem acessar serviços descendentes a

serviços atribuídos ao usuário;

Page 38: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

38

• Verificação se serviços descendentes podem ser acessados por usuários

descendentes aos serviços atribuídos ao usuário;

• Verificação se usuários descendentes podem acessar serviços descendentes

aos serviços negados ao usuário;

• Verificação se serviços descendentes podem ser acessados por usuários

descendentes aos serviço negado ao usuário;

• Verificação se usuários descendentes permitidos podem acessar serviços

descendentes àqueles que são negados para os usuários ascendentes ao em

questão;

• Verificação se serviços descendentes podem ser acessados por usuários

descendentes àqueles que são negados aos serviços ascendentes ao em

questão;

Fazendo os testes relacionados acima temos certeza de que todas as possibilidades de

permissões foram testadas inibindo assim qualquer possibilidade de erro de ordem lógica quanto

a implementação do modelo garantindo a confiabilidade de acordo com a qualidade de software.

Para facilitar estes teste fora criado um script afim de executar cada uma das

possibilidades.

3.5.1 Implementações reais com o modelo proposto

O modelo desenvolvido cria uma ampla possibilidade de implementação, dentre elas

cita-se um aplicativo para gerenciamento de conteúdo desenvolvido usando este modelo.

O website baseia-se no princípio de que se não houver um usuário autenticado, o

usuário que está acessando é chamado de público que tem um registro na tabela de usuários e

possui suas permissões configuradas para visualização do conteúdo disposto de forma pública.

Page 39: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

39

Toda requisição a estrutura principal que faz a verificação de acesso (se o usuário

realmente pode acessar o recurso solicitado), se a resposta for negativa uma página exigindo

usuário e senha é exibida a fim de possibilitar a autenticação do usuário.

Figura 15: Exemplo de página requisitando autenticação para acesso ao recurso

solicitado.

Ao informar um usuário válido é feita uma nova requisição ao mesmo recurso,

porém, quando inicia a execução do script estrutural o usuário é validado e assim ele possui

acesso, desta forma pode acessar por exemplo o menu de manutenção como segue na figura

abaixo.

Page 40: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

40

Figura 16: Exemplo de acesso ao menu por parte do administrador do website

A figura 16 trata do menu de gerenciamento de um usuário que possui o usuário

administrador como um de seus ascendentes e não possui nenhuma negação de serviço. Ao

possuir alguma negação, e se esta for um item mapeado pelo website como sendo um item

principal (no caso foram mapeados todos os itens do menu e relacionados a tabela de serviços

possibilitando a seleção dos nomes como fora exibido na figura sem apresentar todos os serviços

descendentes aos exibidos, como por exemplo: alteração de arquivos, exclusão de arquivos e

inserção de arquivos).

Page 41: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

41

Para um usuário que possui acesso direto (sem que seus ascendentes tenham), são

exibidas as informações como segue na figura 17. Onde o perfil do mesmo não possui nenhuma

permissão por herdar diretamente do usuário público.

Figura 17: Exemplo de acesso ao menu de gerenciamento por parte de um usuário

comum

O mapeamento de funções criado no website, combinado com as permissões do

usuário monta um menu conforme exibido na figura 17, onde o perfil do mesmo não tem

nenhuma função senão a de desconexão e o usuário em particular possui acesso a algumas

funções em específico.

Page 42: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

42

Figura 18: Manutenção de arquivos acessado por usuário com permissão de edição e

exclusão

Estas propriedades ativas que foram grifadas na figura 17 pois estão disponíveis para

usuários que possuem acesso a alteração e exclusão de arquivos.

Page 43: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

43

Figura 19: Manutenção de arquivos para usuário sem permissão para exclusão ou

alteração

Já para o caso do segundo usuário que não possui acesso a exclusão e alteração de

arquivos será exibido uma lista como na figura 18 onde os itens estão desabilitados informando-o

da opção indisponível.

Page 44: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

44

Figura 20: Formulário para alteração do arquivo selecionado

Quando um usuário que possui permissão de acesso a alteração de arquivos tenta

alterar o arquivo é exibido um formulário idêntico com o da figura 20 onde há se a possibilidade

de alteração do arquivo. Do contrário será exibida um formulário como apresentado na figura 15

para dar a possibilidade do usuário autenticar-se com um usuário diferente.

Page 45: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

45

4 Conclusão

O presente trabalho atingiu os objetivos de acordo com o que fora proposto.

A criação do modelo possibilita um gerenciamento eficiente independente ao número

de regras de acesso a recursos. Em aplicações de grande porte este quesito se torna importante

uma vez que temos inúmeros usuários acessando diversos recursos com um grande número de

exceções de acesso particular de cada usuário.

O modelo baseado em uma estrutura hierárquica também se mostra muito eficaz em

aplicações de pequeno porte como tratado no presente documento.

A implementação se fez utilizando a linguagem PHP, o emprego de algumas técnicas

de Orientação a Objeto deixou o modelo ainda mais flexível usando implementações de

interfaces para acesso a dados de outras fontes.

A alteração de aplicativos já existentes torna-se simples, uma vez que se pode fazer a

verificação de acesso a determinado recurso em uma única linha retornando um valor lógico para

ser analisado.

Page 46: UNIVERSIDADE REGIONAL DE BLUMENAU CENTRO DE CIÊNCIAS …pericas/orientacoes/PosWebSegWeb2006.pdf · 2006-04-04 · universidade regional de blumenau centro de ciÊncias exatas e

46

Referências

CÂMARA, Fábio. 58 + Soluções em .Net – Florianópolis: VisualBooks, 2005

DEITEL, H.M. Perl: como programar – Porto Alegre: Bookman, 2002

DEITEL, H.M. C#: como programar – São Paulo: Pearson Education, 2003

GUSTAFSON, David A. Teoria e problemas de engenharia de software – Porto Alegre: Bookman, 2003

HUGHES, Streling. PHP Guia do Desenvolvedor – São Paulo: Berkeley Brasil, 2001

HUSTED, Ted. Struts em Ação – Rio de Janeiro: Ciência Moderna, 2004

KURNIAWAN, Budi. Java para a Web com Servlets, JSP e EJB – Rio de Janeiro: Ciência Moderna, 2002

MARCELO, Antônio. Apache – Configurando o servidor WEB para Linux – Rio do Janeiro: Brasport, 2003

O’BRIEN, James A. Sistemas de Informação e as decisões gerenciais na era da Internet – 2 ed. – São Paulo: Saraiva, 2004

PETERS, James F. Engenharia de Softwarre. – Rio de Janeiro: Campus, 2001

PLATT, David S. Iniciando Microsoft.NET – São Paulo: Makron Books, 2002

WEINBERG, Gerald M. Software com Qualidade – Volume II: medidas de primeira ordem – São Paulo: Makron Nooks, 1994.