Jump to content


marsil

Member Since 27/02/2006
Offline Last Active 14/02/2007, 23:55
-----

Topics I've Started

Sql Injection? Cross Site Scripting?

10/03/2006, 23:26

Olá,

tenho um site em php que guarda informações num banco de dados MySql. Coloquei funções para validar todos os imputs vindos dos formulário (POST) e também validei o número do usuário que fica guardado em um cookie.

O meu código checa se o valor do cookie é um número de 10 dígitos e se o usuário existe. Só então ele escreve os dados no MySql. No entanto, tenho tido problemas com um usuário que tem conseguido alterar o valor do cookie e escrever números de até 20 dígitos na tabela.

Alguém poderia me dar uma orientação sobre como ele pode estar fazendo isso? Quando eu testo o código aqui tudo funciona e não consigo passar com nenhum comando MySql (INSERT, DELETE, etc) pela validação. Também não consigo alterar o meu cookie e passar com números maiores de 10 dígitos. Então, como essa pessoa consegue passar pela validação e inserir esses dados direto na minha tabela??? Eu li alguma coisa sobre Cross Script usando javascript... o usuário poderia estar enviando os comandos através da URL? Se for, como eu posso evitar isso?

Obrigado,

Marcelo

Cookie

05/03/2006, 16:37

Estou desenvolvendo uma enquete para um site, que permite que a pessoa vote uma única vez por dia. Quando alguém tenta votar pela primeira vez, eu instalo um cookie no computador dela:

setcookie($nomedocookie,$valor,time()+31536000);

onde $valor corresponde a um número gerado pela seguinte função:

$valor=mt_rand(1000000000,9999999999); // gera número com 10 dígitos

Esse número é guardado então no mysql, junto com a data. Quando a pessoa tenta votar novamente, eu pego o valor do cookie usando:

if (isset($_COOKIE['nomedocookie']))
{
$valordocookie=$_COOKIE['nomedocookie'];
}

o $valordocookie é então validado, checando cada caractere por valores que não sejam numéricos e usando a função

$valordocookie=substr($valordocookie, 0, 10);

para evitar que alguém altere o cookie e entre com uma string maior do que 10 caracteres.

Então eu comparo o $valordocookie com o número guardado no mysql. Se o número já existe no mysql e a data não é a de hoje, o voto é computado.

O problema é que um usuário tem conseguido alterar o valor do cookie com números de até 20 dígitos e votar à vontade. Mas se eu abro o cookie aqui em casa usando o bloco de notas e altero o valor dele para qualquer número com mais de 10 dígitos, o isset não reconhece mais o cookie e não me deixa votar. Alguém tem idéia de como essa pessoa pode estar alterando o valor do cookie e burlando a validação do substr?

Marcelo

IPB Skin By Virteq