VBWEB - Segurança com dados
Título da Dica: Segurança com dados
Essa dica será menos técnico que as demais, porém creio que até mais importante. É necessário que você tenha plena noção dos meios para passar/receber dados pelas páginas.
Sabemos que as formas usadas para passar dados são através de POST (formulários) e através da URL (site.asp?campo=valor). Pois bem, a forma para requisitar informações é Request("campo"), e só isso basta para pegar dados, não há nada além. O problema é que de qualquer forma que você mande campo para a página, ela pegará o valor. Não existe segurança alguma pra aceitar apenas o valor de determinada página.
Neste artigo falo a respeito disso, que a requisição do valor é apenas pelo nome do campo, e não há qualquer preocupação em de onde vem o envio de tal dado, nem algo explicito que se possa fazer para bloquear.
Entenda melhor: fiz um teste em um site um grande portal, com um form que tinha apenas os campos idênticos, e a página aceitou meus dados como eu queria sem qualquer erro. Imagine a situação de uma loja virtual, em que o carrinho de compras recebe dados do produto (valor, quantidade, etc), e guarda para posteriormente na conclusão gerar o pedido. Se houvesse um envio externo, manipulando dados como o preço, a loja teria que vender pelo valor.. desagradável não?
Mas e como evitar isso? Eu escrevi um artigo a respeito disso (Como bloquear o acesso externo), que no início da página verifica se o cliente vem do mesmo servidor ou se o valor vem nulo (no caso de um aplicativo fazer o post), e então bloquea a página, parando tudo. Porém, tive um contato, informando que há maneira de manipular o cabeçalho, apesar de não saber como fazê-lo, não ignoro isso.
Outra coisa útil é a utilização de uma sessão, criada logo na página de entrada, e as seguintes verificarem a existência do mesmo. Os Sessions eu creio que não haja como alterar, pois é algo exclusivo dentro do servidor, mas isso por si só não resolveria, pois criaria a sessão na entrada e de outro site fazendo o POST ele aceitaria... Então o melhor seria unir a requisição do Session junto a requisição da origem do visitante.
Não é 100% seguro (e o que é?) mas evita coisas bastante desagradáveis, que também é muito importante.