Validar Dados em ASP 6


O que vos venho mostrar hoje é como dificultar o trabalho a pessoas que queiram explorar vulnerabilidades no vosso sistema programado em ASP. Esta semana tive um trabalho em mãos que consistia em resolver um problema num site Inglês programado em ASP pois este andava a ser atacado por hackers através de SQL Injection e através desta técnica também criavam ataques de XSS. Não precisei de muito tempo até identificar um possível buraco que pudesse ser explorado. Depois de alguns testes lá consegui obter informações sobre a base de dados desse site mas também sobre outras bases de dados existentes no mesmo servidor o que mostra não só a falta de cuidado do programador mas também do alojamento, mas como o segundo caso não me dizia respeito tratei de corrigir o primeiro.

Como Validar Dados Em ASP

Existem várias maneiras de validar dados quando estamos a desenvolver aplicações em ASP.

Função: IsNumeric()

A maior parte dos dados passados através de parâmetros nos URL são valores numéricos correspondentes a ID’s, assim a função que a linguagem ASP traz por defeito (built-in) IsNumeric() chega para verificar se os valores dos parâmetros passados correspondem a um número. Foi isto que utilizei para o caso em especifico. O programador tinha feito algo como:

E isto passava o valor do id sem qualquer tipo de validação. Passando agora a algo como

Mas podiam ter sido utilizadas outras técnicas caso não se tratasse de um valor numérico.

Escape dos Dados

Esta função vai fazer com que todos os caracteres ‘ desapareçam, pode-se adaptar esta função para outros caracteres, o que é algo que aconselho vivamente a fazerem, bem como a palavras como script, xp_, select, drop, update, where, entre outras.

Desafio

Desafio todos os leitores a criarem uma função em ASP para fazer uma validação e tratamento dos dados protegendo as páginas de SQL Injection e de ataques XSS. Para isso só precisam de deixar a vossa função nos comentários.

A melhor função será publicada num post com uma menção para o seu autor.

Show some love, divulguem e participem 🙂


Leave a Reply

6 thoughts on “Validar Dados em ASP

  • maisAlojamento

    viva,

    em termos globais o código que propuseste deverá ser suficiente para prevenir a maior parte dos ataques via sql injection.

    no entanto deixo dicas de optimizacao:

    em vez de:

    codificar assim:

    • João Pedro Pereira Post author

      Sem dúvida muito mais optimizado que o meu código, quanto ao tempo ganho não tenho noção de quanto será o ganho mas devemos sempre optimizar ao máximo o código pois já o povo dizia ‘grão a grão enche a galinha o papo’.

      Obrigado pela tua contribuição, espero ver-te mais vezes por cá 🙂

  • maisAlojamento

    Esta função seria mais aprofundada embora a de cima como restringe o parâmetro a um numérico será suficiente. Mas para outros inputs como strings esta é mais indicada pois remove comandos sql:

    • Francisco Silva

      Aprofundando a função que enviaste:

      Desta forma é possível fazer mais protecções pois podia-se fazer o update de campos da base de dados ou podiam ser feitos ataques XSS pois era na mesma possível inserir scripts.

  • João Pedro Pereira Post author

    Adicionei Syntax Highlighting aos vossos posts para tornar o código mais legivel.

    Francisco obrigado pela tua contribuição e tocaste num ponto que o maisAlojamento se esqueceu que foram os ataques XSS, podiamos preencher a função com mais palavras chave, mas já começa a ficar interessante.

    Tenho pena é de não poder publicar a primeira função porque é copiada de outro site (nem a segunda por ser um derivado da primeira). Vamos lá puxar pela imaginação pessoal ;).

  • Rodrigo

    Fiz o teste e a função usada
    if isnumeric(request(“id”)) === true then

    Se voce ir no navegador na barra do endereço e acrescentar (….) junto ao numero da variavel (id) vai da problemas.

    Tera que usar alguma função que retire o ….