Desenvolvimento

10 dez, 2009

Segurança: Ajax X Applets

Publicidade

Recebi um link para um projeto nacional que tem tido muito
sucesso e fui ler as informações no site. Lá encontrei algo que é
um perfeito exemplo de má interpretação de tecnologias e isso me
deixou bastante intrigado. É uma questão sobre a camada de apresentação
do projeto, que é feita em Ajax, até aí tudo bem certo. Aafinal, o que
de novo hoje em dia não usa Ajax?

Não, não vou colocar aqui o projeto e o link para o
site pois não quero que esse texto soe como uma crítica direto ao
projeto, pois não é, é apenas uma crítica à forma como uma questão em
particular foi encarada, o que não tira os méritos do projeto.

IMHO (ou: In My Humble Opinion), o problema foi o modo com que isso foi exposto e, até de certa
forma, usado como motivo para justificar a adoção ao Ajax. No site do
projeto existem claramente duas seções: Ajax e Não Utiliza Applets.
A categoria Ajax é simples e mostra algumas vantagens de se utilizar
Ajax na apresentação de aplicações Web. Já a categoria “Não Utiliza
Applets” possui uma série de divagações com as quais não concordei muito,
e vou dizer o porquê.

Começando:

Applets… além de serem mais lentos e inseguros?

Lentos eu até concordo, quando comparados com utilitários bem
escritos com JavaScript, mas isso não quer dizer que sempre será mais
lento. Não é difícil escorregar e perder a linha gerando na aplicação
vários (ou até dezenas) Mega Bytes de JavaScript que serão
tão lentos quanto um applet para carregar e poderão sacrificar o
cliente como qualquer aplicação desktop repleta de memory leaks (quem nunca viu o Firefox sugando seus ~400Mb++ de memória?).

E a segurança, a não ser que o cliente esteja utilizando uma versão
antiga da JVM (cujos bugs já são conhecidos e possuem correção,
geralmente em versões mais novas), eu concordo que possa haver problemas
com segurança, mas ainda não concordo que a segurança de um applet seja
inferior à de algum componente escrito em JavaScript.

Podemos começar
falando de vulnerabilidade ao cliente, com o applet, ou o cliente tem a
JVM ou não. Portanto, ou o applet irá funcionar ou não. Já com o JavaScript, o controle de funcionar ou não, não é como um
ON/OFF, o usuário tem diversas formas de bloquear e desbloquear
determinadas operações, sem contar as formas existentes de interferir
no fluxo normal de processamento do JavaScript, com o GraseMonkey,
por exemplo, é fácil escrever códigos que se integram (inicialmente à
apresentação) ao código JavaScript de qualquer página. Sem contar as
possíveis formas de se utilizar de XSS para explorar falhas no DOM, HTML/Scripts injection, etc.

Em relação ao Javascript, os applets são mais lentos de
processar além de possuírem espaço muito delimitado na página onde se
executam

Essa parte de integração com os demais objetos da página realmente é
um ponto fraco, muito fraco, quando utilizamos applets. Já a questão de
velocidade de processamento, é fácil confundir o tempo de processamento
gasto numa determinada funcionalidade com a quantidade de operações que
cada funcionalidade realmente executa, mas como eu nunca fiz esse tipo
de teste – de escrever um applet e um JavaScript que façam a mesma
coisa – não irei muito além, apesar de não acreditar que possa haver
diferenças tão grandes, afinal, tudo é executado no cliente, com os
mesmos recursos.

Todos os recursos são feitos sem a utilização de Applets (com eufemismo – isso não tem no site),
os sistemas são baseados principalmente no AJAX, o que garante
velocidade e segurança, além de que não é necessária a instalação da
JVM na máquina do cliente

Pois é, antes que arremessem as pedras, não estou aqui defendendo o
uso de applets frente a componentes Ajax, muito pelo contrário, eu já
trabalhei bastante com applets e sei o quanto é chato, em todos os
aspectos, e também já trabalhei, trabalho e pretendo trabalhar por um
bom tempo com componentes Ajax bem escritos. A razão pela qual escrevi
este texto foi para, de certa forma, criticar o modo com que foi exposto
o motivo para usar Ajax. Não acho que seja necessário dizer: “uso
Ajax pois Applets são lentos, inseguros, gordos e feios”. Afinal de
contas, não é bem assim.