[quote=Mikhas][quote=AbelBueno]Mikhas, acredito que qualquer campo de texto que o usuário preecha deve ser tratado.
Imagine por exemplo um campo para o nome da pessoa.
Após cadastrado esse nome aparecerá numa saudação qualquer dentro do sistema :
<h2>Bom dia, {nome} </h2>
Se nessa variável {nome} tiver um script, isso pode te gerar problemas.
Em algum momento do processo entre armazenar e exibir, precisará validar isso.
alias, uma vez tentei fazer isso utilizando os Converters do Vraptor.
Criei um para String, mas não era chamado (provavelmente porque o valor por default já é string)
Na ocasião acabei criando um tipo para isso, para passar pela conversão, que efetuava o tratamento, e depois se transformado em string.
Como era algo pequeno, valeu a pena.
Num projeto maior não sei se essa abordagem é viável.
[/quote]
No caso de um campo de nome, idade, tipo, etc etc… Você deve fazer uma validação do dominio do valor do seu campo. Um campo de nome só pode conter letras e espaços, idade tem que ser numerico, o campo tipo é definido por um Enum XXX… Nesse caso, validators do vraptor se enquadram muito bem ou você pode usar Java Bean Validation (JSR 303).
Você tambem pode parar para pensar no overhead que o processo de sanitizar vai adicionar ao seu sistema. Isso não é um processo relativamente peve ou rapido o bastante para usar em todos ou grande parte dos campos. Validar é bem mais tranquilo.
E tem a complexidade que você esta tirando de um lugar e colocando em outro.[/quote]
Obrigado pelas opiniões, colegas,
Mikhas, eu tendo a concordar com o colega AbelBueno. Uma validação de dominio não abrangeria a proteção contra ataques XSS. O exemplo que ele deu foi muito bom…afinal de contas, um script malicioso passaria em uma validação de “letras e espaços”, concorda?
. Validar a integridade do dado do ponto de vista do modelo é mais tranquilo sim, mas não dá a segurança necessária.
AbelBueno, pensei nessa solução de criar um tipo específico pra isso que sempre devolvesse o valor limpo, mas dada a quantidade de classes onde teria que restringir isso acho que acabaria ficando meio macarronico. Parti pra implementação de um request wrapper que limpa o valor sempre que um parametro da requisicao é solicitado, depois vou postar o codigo pra aqui pra avaliação da geral.
E como disse o colega Mikhas há a questão do overhead que isso vai adicionar no tratamento da request…estou medindo isso tambem pra ver o impacto (certamente haverá algum)
Lembrei desse post antigo no blog da Caelum bacana sobre o assunto: http://blog.caelum.com.br/seguranca-em-aplicacoes-web-xss/
Obrigado amigos.