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