quinta-feira, 14 de agosto de 2008

String Sanitize - Como previnir XSS em páginas que usam AJAX

Quem nunca precisou varrer uma string para substituir alguns caracteres inválidos?

Ontem à noite, me deparei com o seguinte problema:
Possuía uma página que recebia um objeto javascript, este, porém, possuía uma propriedade que receberia um valor previamente informado pelo usuário.

Exemplo:


De cara, nota-se uma possível falha de segurança, imagine caso um usuário mal intencionado informasse um valor como:

xss', poison:function(){alert('xss')}(), foo: '

A minha resposta seria:



Que como vocês podem notar, ainda é um objeto javascript válido, porém esta envenenado com xss.

Caso eu desejasse consumir este objeto na página, receberia uma mensagem de alerta durante o eval.

Para corrigir este problema desenvolvi esta pequena função em VB.NET



Que simplesmente substitui os caracteres especiais por suas representações Unicode ref http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Guide:Unicode

Então, apos este método, quando recebo strings envenenadas meu objeto Javascirpt fica assim:



Espero que ajude, abraços

segunda-feira, 11 de agosto de 2008

Primeira letra de cada palavra em maiúscula.

Olá pessoal, hoje me deparei com um pequeno problema:
Estava recebendo do banco uma string com os caracteres todos em lowercase, porém teria que exibi-los para o usuário como titulo na página.

Bem, sei que o CSS sozinho poderia fazer esta conversão para mim (utilizando a propriedade text-transform), porém como sou teimoso, fui direto no site da MSDN e acabei encontrando uma solução para o meu problema da forma como eu queria, eis abaixo:

public static string Capitalize(string str)
{
System.Globalization.TextInfo textInfo = new CultureInfo("pt-BR",false).TextInfo;
return textInfo.ToTitleCase(str);
}

Descobri também que em VB.NET é mais fácil ainda olhem:

Dim strName As String = "tom spink"
strName = StrConv(strName, VbStrConv.ProperCase)
MsgBox(strName)

Então é isso ai... Espero que estes snippets ajudem vocês também!

Abraços

quarta-feira, 23 de julho de 2008

String.Format em Javascript

Já faz algum tempo que não posto aqui no blog, muita coisa aconteceu nestes últimos dias, consegui passar nas provas, virei moderador do fórum imasters (sessão javascript) mudei de emprego, deixei de morar de aluguel e assim vai... Bem, deixando minha vida pessoal de lado, segue abaixo uma situação interessante que tive que passar.

Bem, foi lançado um desafio entre meus amigos para redução de uma implementação em javascript do método String.Format ( do .NET), a ideia era apenas de “copiar” a funcionalidade básica deste método, ganharia quem fizesse em uma menor quantidade de caracteres possível e este deveria ser compatível com os browsers mais utilizados (IE, Firefox, Opera etc)... Antes de começar com a minha implementação, fiz uma consulta básica na internet para conhecer as versões já existentes e fiquei impressionado com a dificuldade e o esforço algorítmico em que os à maioria autores tiveram para alcançar comportamento similar... Certo de que teria um desempenho melhor, iniciei com a escrita do meu algoritmo que ao final ficou assim:

String.Format = function(a) {
var b = Array.prototype.slice.call(arguments,1);
return a.replace(/{(\d+)}/g, function(){return b[RegExp.$1]});
};

Ele possui apenas 136 caracteres, valendo lembrar que ela pode ser reduzida em mais 6 caracteres*. Mas não para por ai, se a competição considerasse apenas o Firefox como navegador padrão, teria conseguido o valor impressionante de apenas 106 caracteres*!

//Executa apenas no Firefox V3.0 ou superior
String.format=function(a){
let b = Array.slice(arguments,1);
return a.replace(/{(\d+)}/g, function() b[RegExp.$1]);
}


*versão sem palavras reservadas e ponto-e-virgulas

Ao final, fiquei orgulhoso do meu desempenho, sem falar que acabei ganhando a competição e o prêmio que foi não precisar pagar o almoço de hoje hehehe.

Abraço pessoal, até a próxima!

terça-feira, 18 de março de 2008

Surpresa desagradável

As vésperas da prova 70-536 hoje acessei o site da prometric para marcar meu Appointment para a próxima que farei, a 70-528, quando por minha surpresa me deparo com a seguinte mensagem: No Dates Found. We're sorry. We couldn't find any Exam Dates based on the selections you've made. Please try another Test Center. O problema é que existem apenas dois Centros em Brasília, Hepta e a CT Fóton e a mesma mensagem foi exibida em ambas. A minha intenção era para que até o final de Abril deste ano ter feito as duas provas, confesso que estou um pouco desapontado e temeroso, porém amanhã entrarei em contato com estas duas empresas para obter maiores informações, ficarei torcendo para que seja apenas um 'erro do site'.

---
Atualização (01-04-2008)
Eu fiz a prova 70-536 dia 25 de março e passei!!!
Não marquei ainda a prova 70-528.

sexta-feira, 29 de fevereiro de 2008

Fim do Nestcape!

Hoje ao ler meus feeds me deparei com uma notícia entristecedora, segundo uma nota divulgada pela a AOL o navegador Netscape será descontinuado amanhã, dia 01 de março. Confesso que não fiquei feliz com a noticia, o Netscape foi o primeiro navegador que fui apresentado, foi nele que aprendi o que significava aquele 'bixo novo' chamado internet, embora hoje utilize o IE7 para navegar pela web senti uma certa nostalgia (Cheguei até a baixar e instalar no Netscape aqui na minha máquina rsrs). O fim do Netscape já havia sido anunciado no final de 2007, mas AOL havia adiado para que desse tempo para que os seus usuários migrassem para outros navegadores. O Netscape chegou a ser um dos navegadores mais utilizados no inicio da década de Noventa, mas seu uso foi vencido pelo seu concorrente o Internet Explorer, hoje a guerra esta entre IE e Firefox, será que a Microsoft vencerá mais esta batalha?


Se quiser saber mais sobre esta notícia, aconselho que leia a nota publicada no Netscape Blog.