shumy Posted December 7, 2006 at 11:45 AM Report #69309 Posted December 7, 2006 at 11:45 AM Tenho reparado em algumas questões sobre validação de dados que encontro. No que diz respeito a validação de texto temos sempre uma ferramenta potente como as “regular expressions”, e que é bastante eficiente desde que a string de match seja construída correctamente. As “regular expressions” aparecem em tudo quanto é sitio, e o conhecimento destas merece ser assinalado. Funções de procura, validações, parâmetros de alguns comandos como “grep”. As validações de dados devem sempre ser executadas. São uma importante parte na segurança. Os dados input devem ser validados quanto ao conteúdo para evitar “code injections” e quanto ao tamanho para evitar “buffer overflow”. Vamos a alguns exemplos: [‘#] para evitar SQL injections em MySQL Esta validação procura por caracteres não permitidos. É uma validação mais solta, já que podemos estar a esquecermo-nos de alguma coisa. Validações mais fortes procuram um formato específico de entrada. Validação de um e-mail: ^[a-zA-Z][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$ Passo a explicar alguns metacaracteres. ^ obriga a string a começar pela validação da expressão que se segue. Neste caso [a-zA-Z] caracteres alfabéticos. Inclui caracteres do tipo ã, á, etc. * repete a expressão de validação anterior infinitas vezes. [\w\.-]* aceita palavras, pontos e “hyphens”, com sequências repetidas. $ obriga a string a acabar com a expressão de validação anterior. [a-zA-Z]$ implica que a string tem de acabar com um carácter alfabético. \ caracter de escape. Para que o caracter seguinte não tenha significado para o interpretador, mas seja interpretado como outro caracter qualquer. Validação do tamanho do campo : ^[\w\.-]{0,5}$ Nesta expressão são permitidas palavras, pontos e “hyphens”, mas o tamanho do campo está limitado de 0 a 5 caracteres. [^0-9]* procura sequências que não contenham numéricos. Neste caso o metacaracter ^ significa negação da expressão. O que quer dizer que o significado dos metacaracteres dependem do contexto onde são inseridos. Procurar sequências alternativas: gato|gatas|gatinhas faz um match de gato, gata ou gatinhas. | caracter que representa “ou”, varias alternativas. Para melhor conhecimento desta ferramenta aconselho o link http://guia-er.sourceforge.net/ Aconselho também a obter uma ferramenta para trabalhar com “regular expressions”. Eu tenho na minha posse o Regex Master 1.0 beta. Mas que neste momento não encontro para download livre, talvez o mesmo tenha passado a versão comercial. Fiquem bem 😄 Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!
Triton Posted December 7, 2006 at 11:56 AM Report #69311 Posted December 7, 2006 at 11:56 AM Bom trabalho! 😄 <3 life
Saco Posted December 7, 2006 at 01:24 PM Report #69334 Posted December 7, 2006 at 01:24 PM Muito bom, mas tenho algumas reparações a fazer: o [a-zA-Z] não inclui caracteres acentuados (a menos que estejas a usar algum programa "adaptado"). o * também aceita nada já agora falta explicar porque é que usas \w e \. 😄
shumy Posted December 7, 2006 at 02:11 PM Author Report #69343 Posted December 7, 2006 at 02:11 PM A logica do [a-z] é que siga a tabela de ASCII. Mas no programa de teste que tenho aceita acentuação. o * também aceita nada Exacto. já agora falta explicar porque é que usas \w e \. 😄 Está explicado implicitamente quando falo no caracter \ e quando falo na expressão [\w\.-]* Foi só uma pequena introdução. O resto da informação sigam o link. Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!
Rui Carlos Posted December 7, 2006 at 06:48 PM Report #69397 Posted December 7, 2006 at 06:48 PM [?#] para evitar SQL injections em MySQL Esta validação procura por caracteres não permitidos. É uma validação mais solta, já que podemos estar a esquecermo-nos de alguma coisa. Validações mais fortes procuram um formato específico de entrada. será que me podiam explicar um pouco melhor como é que isto funciona? 😄 Rui Carlos Gonçalves
shumy Posted December 7, 2006 at 07:14 PM Author Report #69421 Posted December 7, 2006 at 07:14 PM [?#] para evitar SQL injections em MySQL Esta validação procura por caracteres não permitidos. É uma validação mais solta, já que podemos estar a esquecermo-nos de alguma coisa. Validações mais fortes procuram um formato específico de entrada. será que me podiam explicar um pouco melhor como é que isto funciona? 😄 Se um input é usado numa query SQL e o mesmo deixar passar caracteres com significado em MySQL, a execução da query está sujeita a alterações. Tendo em conta que os caracteres ' e # são bestante importantes, estes devem pertencer a uma blacklist de caracteres. Exemplo: SELECT * FROM Users WHERE login = '<input_login>' AND pass = '<input_pass>' sem validações e com <input_login> = x'# o resultado fica SELECT * FROM Users WHERE login = 'x'# o resto do código são comentários... Aqui há coisa de 2 anos fazia umas malhas de croché, depois fartei-me e fui para informática!
Saco Posted December 7, 2006 at 11:11 PM Report #69519 Posted December 7, 2006 at 11:11 PM Se um input é usado numa query SQL e o mesmo deixar passar caracteres com significado em MySQL, a execução da query está sujeita a alterações. Tendo em conta que os caracteres ' e # são bestante importantes, estes devem pertencer a uma blacklist de caracteres. Exemplo: SELECT * FROM Users WHERE login = '<input_login>' AND pass = '<input_pass>' sem validações e com <input_login> = x'# o resultado fica SELECT * FROM Users WHERE login = 'x'# o resto do código são comentários... Agora imagina que tinhas <input_login> = x'; drop table Users # Ficavas com SELECT * FROM Users WHERE login = 'x'; DROP TABLE Users # o resto do código são comentários... Que além de fazer com que não seja necessária a password ainda fiques sem utilizadores na tua base de dados... E quem diz DROP TABLE diz QUALQUER comando MySql...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now