Entendendo as aplicações Web

Em essência, uma aplicação web é um software que é instalado em um servidor web e é projetado para responder a solicitações, processar informações, armazenar informações e dimensionar as respostas de acordo com a demanda e, em muitos casos, é distribuído em vários sistemas ou servidores.

Ao contrário de alguns anos atrás, as aplicações web vêm em três variações:

  1. Baseado em Navegador – Incluem código que pode ter sido parcialmente processado no servidor, mas é executado no próprio navegador Web. Tal aplicação tem a capacidade de acessar dados armazenados em um servidor, bem como no sistema local ou ambos, dependendo do design;
  2. Baseados no cliente – São essencialmente semelhantes às aplicações baseadas em navegador, mas em vez de serem executados dentro do navegador, são executados como aplicação própria. Aplicações que exigem que sejam instaladas do lado do cliente se encaixam nesta categoria;
  3. Aplicativos móveis – São, de longe, o tipo mais comum encontrado hoje em dia. Para ser incluído nesta categoria o aplicativo normalmente é executado em um sistema operacional móvel, como aqueles executados em smartphones e tablets, principalmente Android do Google ou iOS da Apple;

Então, o que todos esses tipos têm em comum? Cada um deles, tem alguma capacidade de processar informações em um servidor antes de fornecer as informações para o lado do cliente.

O Cliente e o Servidor

Entender os aplicativos da Web significa que você também deve examinar a interação entre cliente e servidor que ocorre neste ambiente. Um aplicativo de servidor é hospedado em um servidor web e é projetado para ser acessado remotamente por meio de um navegador da Web ou aplicativo habilitado para web. Normalmente, esse ambiente permite que vários aplicativos cliente acessem o servidor simultaneamente, para recuperar dados ou para exibir ou modificar dados. O cliente executa processamento mínimo de informações e normalmente é otimizado para apresentar as informações ao usuário. As informações são armazenadas no servidor, com algumas pequenas porções, como metadados residente no cliente.

Metadados, para usar a descrição técnica, são dados que descrevem outros dados, que é como dizer que o vermelho é um tipo de cor, o que não ajuda muito. Entretanto, os metadados podem ser facilmente visualizados se você considerar um documento em um disco rígido. Este documento contém dados como o conteúdo desta postagem, que é fácil de entender. Os metadados nessa situação seriam as propriedades do próprio arquivo, que descrevem o arquivo em termos de tamanho, tipo, data, autor e outras informações.

Os metadados são usados para melhorar o desempenho de aplicativos e ambientes, pois podem acelerar o processo de localização e uso de informações. Por exemplo, um índice é uma forma de metadados que fornece informações básicas sobre algo, permitindo que o conteúdo seja encontrado e informações relevantes a serem examinadas.

Então, por que escolher um aplicativo baseado na Web sobre outros modelos cliente-servidor? Muitos benefícios potenciais surgem deste ambiente de hospedagem em relação a outros modelos. Um dos maiores benefícios é que um aplicativo cliente não precisa ser desenvolvido para cada plataforma como nas configurações tradicionais. Uma vez que muitas aplicações web são concebidas para ser executado dentro de um navegador web, a arquitetura subjacente é em grande parte sem importância. O cliente pode estar executando uma ampla gama de sistemas operacionais e ambientes sem penalidade para a aplicação.

No entanto, alguns aplicativos da Web não são executados em navegadores da Web e são bloqueados em uma plataforma específica, e estes residem em dispositivos móveis. Os clientes de aplicativos Web deste tipo são projetados para um tipo específico e versão de um sistema operacional móvel (como o Android) e só podem ser executados lá. No entanto, o desenvolvedor poderia codififcar diferentes versões do cliente que seria capaz de acessar os mesmos dados das plataformas que residem no servidor.

Os aplicativos da Web dependem, em muitos casos, do uso de tecnologias como Active Server Pages (ASP), ASP.NET e PHP para permitir que eles funcionem. Essas tecnologias são chamadas de tecnologias do lado do servidor (server-side), o que significa que elas processam e manipulam informações no servidor. Outras tecnologias, como HTML dinâmico (DHTML), HTML 5, JavaScript e linguagens relacionadas são processados no cliente, o que os coloca na categoria de tecnologias client-side.

A maioria das aplicações web normalmente encontradas baseiam-se no modelo cliente-servidor e funciona em um sistema onde os dados são inseridos no cliente e armazenados no servidor.

Aplicativos como armazenamento em nuvem ou serviços de e-mail baseados na Web como o Yahoo !, o Gmail e outros usam essa configuração como parte de seu funcionamento normal.

Um olhar para a nuvem

Nos últimos anos, uma nova tecnologia surgiu na cena sob a forma de nuvem. Simplificando, a nuvem é um modelo para criar recursos compartilhados que podem ser dinamicamente alocados e compartilhados sob demanda. O principal benefício aqui é que os usuários do serviço em nuvem não precisam se preocupar com os detalhes reais da configuração, apenas que seus recursos estão lá e disponíveis.

As tecnologias em nuvem são apresentadas como um serviço que pode revolucionar as empresas, porque os itens tradicionalmente hospedados em configurações cliente-servidor agora podem ser hospedados em um ambiente mais flexível. Empresas olham para a nuvem como uma forma eficaz de colher os benefícios de uma tecnologia sem ter que lidar com todo o apoio, formação e outras questões para manter os mesmos serviços localmente. No entanto, ainda há questões para lidar como as de segurança e jurídica, que evoluem à medida que novas questões surgem a partir da transição.

Enquanto o público tende a pensar da nuvem como um lugar para armazenar suas fotos, vídeos, documentos e outros dados, esta é apenas uma pequena parte do que a nuvem pode oferecer. Normalmente, as tecnologias na nuvem são divididas em categorias:

  • Infraestrutura como Serviço (IaaS) é a forma mais simples e básica de serviços em nuvem disponíveis. Essencialmente, este tipo de configuração de nuvem fornece a capacidade de hospedar máquinas virtuais sobre as quais sistemas operacionais e aplicativos podem ser instalados. Esse tipo de modelo também permite a implantação de firewalls baseados em nuvem, balanceadores de carga, VLANs e outros tipos de serviços de rede;
  • A plataforma como um serviço (PaaS) é um modelo mais adequado para desenvolvedores de aplicativos da Web e aqueles em situações semelhantes. Esse ambiente fornece hospedagem e escalabilidade, bem como padrões para desenvolvimento e o cliente desenvolve sua aplicação de acordo com a sua necessidade;
  • O Software como um Serviço (SaaS) é um modelo no qual o cliente transita de aplicativos de software gerenciados localmente para configurações hospedadas em nuvem. Na prática, isso pode ser semelhante ao produto Office 365 da Microsoft ou aplicativos do Google. Este modelo tem se tornado cada vez mais popular porque a aquisição de software, gerenciamento e licenciamento de despesas gerais é reduzido do que era antes da adoção do modelo.

No mundo atual da tecnologia, a nuvem é uma tecnologia difundida usada por milhões de pessoas e empresas em todo o mundo. Empurrar o e-mail, aplicativos de escritório e outros itens do ambiente local para a nuvem permitiu que as empresas realizassem grandes economias em termos de tempo e dinheiro. Os aplicativos da Web agora estão se integrando com provedores de serviços em nuvem para permitir maior flexibilidade e acesso do que era facilmente alcançado antes. Muitos dos aplicativos e ambientes presentes na nuvem incluem aplicativos da Web hospedados localmente para atuar como um front-end para uma solução em nuvem. De fato, com a ascensão de dispositivos móveis, a nuvem adquiriu um novo significado com a inclusão de smartphones, tablets e outros dispositivos que podem facilmente fazer parte do seu ambiente.

Nesta discussão estou fazendo uma declaração geral de que você estará terceirizando sua tecnologia de nuvem, mas isso nem sempre pode ser verdade. Em muitos casos, as empresas tiveram que construir sua própria nuvem para lidar com certas questões, como garantir que a configuração e as pessoas na organização permaneçam seguras. Nessa situação, todo o equipamento é comprado, configurado, gerenciado e mantido no local. Esta configuração é comumente conhecida como uma nuvem privada.

Análise mais próxima de uma aplicação Web

As aplicações Web são projetadas para serem executadas em servidores web e enviar sua saída pela Internet. Você pode visualizar um aplicativo da web como consistindo de não apenas um cliente e servidor, mas também camadas. Essas camadas são as seguintes:

  • Camada de apresentação – Responsável pela exibição e apresentação de informações ao usuário do lado do cliente;
  • Camada Lógica – Usada para transformar, consultar, editar e manipular informações de e para os formulários nos quais ela precisa ser armazenada ou apresentada;
  • Camada de dados – Responsável pela retenção de dados e informações para o aplicativo como um todo.

Todas essas camadas dependem da tecnologia trazida na forma da World Wide Web, HTML e HTTP. HTTP é o principal protocolo usado para comunicação entre clientes e servidores, e opera sobre a porta 80, mas outros protocolos são usados às vezes.

HTTPS (HTTP empregando mecanismos de criptografia) pode ser usado para proteger dados em trânsito. Essa abordagem é comum em aplicativos como webmail e comércio eletrônico.

Os aplicativos Web fazem uso intensivo de uma tecnologia subjacente do servidor web, como os Internet Information Services da Microsoft (IIS), o Servidor Apache e o Servidor da Web do iPlanet da Oracle. Recursos como páginas da web são solicitados através do HTTP sem estado. O cliente fornece um identificador de recurso uniforme (Uniform resource identifier – URI), que informa ao servidor quais informações estão sendo solicitadas e o que retornar.

“Sem estado” refere-se ao fato de que o protocolo não mantem controle das informações de sessão de uma conexão para a próxima. Cada comunicação em HTTP é tratada como uma ligação separada.

Outro componente comum das aplicações web é o recurso conhecido como cookies. Um cookie é um arquivo armazenado em um sistema cliente que é usado como um token por aplicativos para armazenar informações de algum tipo (dependendo do aplicativo). No que diz respeito às aplicações, os cookies são um elemento comum, mas do ponto de vista da segurança, são vistos como uma responsabilidade, uma vez que podem ser facilmente copiados e alterados.

Análise mais próxima nos cookies

Cookies, embora necessários para o funcionamento de um número inimaginável de aplicações web, também são uma responsabilidade enorme. Os cookies são um método de ataque comumente exercido por usuários mal-intencionados que os empregam para direcionar outros usuários e para comprometer a segurança geral de um aplicativo bem desenvolvido.

A importância dos cookies não pode ser ignorada, nem o potencial de dano pode ser subestimado. Aplicativos que dependem da capacidade de manter informações de estado através de protocolos sem estado, como HTTP, seria muito difícil, senão impossível, de criar sem a inclusão de cookies. Em muitos casos, um cookie é principalmente um token de autenticação ou um veículo de armazenamento de dados. Assim, é fácil entender por que um invasor deseja essa informação, pois pode permitir que eles tenham acesso a um aplicativo através de sequestro de sessão ou meios semelhantes. Na verdade, alguns dos ataques que já vimos, como XSS ou sniffing poderia facilmente capturar informações de cookie.

Agora, vamos olhar para o objetivo principal do cookie, quanto a manutenção das informações do estado. O principal protocolo da web, HTTP, nunca foi projetado para e, portanto, é incapaz de manter o controle de informações do estado através de múltiplas solicitações ou visitas a um recurso. Portanto, um aplicativo em execução sobre esse protocolo sem estado precisa manter o controle dessas informações de alguma forma, e é aí que os cookies fazem a diferneça.

Os cookies são uma forma de armazenar informações que o protocolo não consegue armazenar. Para entender esse processo, vamos considerar um ambiente comumente encontrado, como uma loja on-line como a Amazon. Quando alguém visita este site, eles podem fazer login em sua conta e fazer várias coisas, mas principalmente eles podem comprar. Quando um usuário navega no site e clica no botão Adicionar ao carrinho ao lado de um item, o site faz exatamente isso. À medida que o usuário se move de página para página encontrando outras coisas para adicionar, eles repetem o processo. Enquanto isso está acontecendo, nos bastidores um cookie armazena informações sobre o que está acontecendo e o que o usuário adicionou ao carrinho. O aplicativo da Web está usando uma instrução especial em HTTP conhecida como Set-Cookie, que é enviada para o navegador como uma resposta no formato “nome = valor”, que o navegador adiciona ao cookie. O navegador irá transmitir essas informações de volta para o aplicativo para cada solicitação subsequente, informando a aplicação sobre o que o usuário fez, o que, neste caso, é adicionar itens ao carrinho em diferentes quantidades, preços, cores e outros. Como você pode ver, sem o cookie o processo seria diferente.

Os cookies não são um recurso ruim e isso nunca deve ser a implicação em qualquer lugar. Muitas aplicações web e os desenvolvedores devem ser aplaudidos por lidar com cookies de forma segura, mantendo assim informações sensíveis fora das mãos de alguém malicioso.

A afirmação de “um cookie é apenas um arquivo de texto e, portanto, nada de ruim pode vir dele” é falsa. Os cookies podem ser usados com segurança, mas também podem ser um passivo quando não usados corretamente.

Partes do quebra-cabeça da aplicação Web

Em uma aplicação web existem vários componentes, cada um dos quais tem uma função específica. Cada um tem suas próprias vulnerabilidades também.

Processo de Login ou Autenticação – Um componente é apresentado aos usuários para que eles forneçam um nome de usuário e uma senha para o processo de autenticação e posteriormente para o processo de autorização.

Em termos de tecnologia, existem diferentes maneiras de autenticar um usuário, que vão desde:

  • Autenticação anônima que se resume a todos os visitantes do site usando a mesma conta para acessar recursos no site. Nenhuma caixa de diálogo de login ou prompts são fornecidos para aceitar credenciais;
  • Autenticação básica (basic authentication) que envia todas as informações de autenticação em texto simples;
  • Autenticação Digest (Digest authentication) um método que essencialmente passa um hash para autenticar usuários;
  • Autenticação integrada do Windows para aplicativos baseados em Microsoft. Isso usa a tecnologia de autenticação do Windows embutida para executar o processo;
  • Certificados digitais para uso em SSL;
  • Mapeamento de certificados em que os certificados digitais são mapeados para contas de usuário específicas;

Servidor Web – Esta é a base para todo o sistema. É a combinação de hardware e software usada para hospedar o próprio aplicativo web.

Acompanhamento de Sessões (Session Tracking) – Este componente permite que o aplicativo da Web armazene informações sobre um cliente relacionadas à sua visita atual ou futuras visitas nele. Em muitos casos, devido à natureza sem estado do HTTP, os cookies são usados para armazenar informações de estado para aplicações web.

Permissões – Com base no qual eles se autenticam como e se a autenticação é bem-sucedida, as permissões determinam o nível de acesso que o usuário tem aos recursos no servidor.

Conteúdo da Aplicação – Esta é a informação com a qual o usuário irá interagir fazendo solicitações ao servidor.

Páginas de Acesso a Dados – Páginas que são anexadas a uma biblioteca que fornece acesso a dados.

Armazenamento de dados – Este componente é onde as informações valiosas para o aplicativo da Web estão contidas. Por design, isso pode ou não pode ser armazenado no mesmo sistema. Em muitos casos significa um banco de dados de algum tipo, que geralmente assume a forma de MySQL, Microsoft SQL Server ou ofertas da Oracle.

Lógica – Este componente é responsável por interagir com o usuário e fornecer os meios para a informação correta a ser extraída do banco de dados.

Logout – Esta pode ser uma função separada e é usada pelos usuários para desligar sua conexão com o aplicativo da web.

Em muitos casos, além da capacidade de os visitantes fazerem logon conscientemente da sessão, os aplicativos da Web também desconectam automaticamente os usuários após um período de inatividade.

Sugestões de livros:

Sou bacharel em Sistemas de Informação pela Estácio de Sá (Alagoas), especialista em Gestão Estratégica da Tecnologia da Informação pela Univ. Gama Filho (UGF) e pós-graduando em Gestão da Segurança da Informação pela Univ. do Sul de Santa Catarina (UNISUL). Certificações que possuo: EC-Council CEH, CompTIA (Security+, CySA+ e Pentest+), EXIN (EHF e ISO 27001), MCSO, MCRM, ITIL v3. Tenho interesse por todas as áreas da informática, mas em especial em Gestão e Governança de TI, Segurança da Informação e Ethical Hacking.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *