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
- Fórum WMO
- → Viewing Profile: Tópicos: marsil
Community Stats
- Group Usuários
- Active Posts 6
- Profile Views 1035
- Member Title Novato no fórum
- Age Age Unknown
- Birthday Birthday Unknown
-
Sexo
Não informado
0
Neutral
User Tools
Friends
marsil hasn't added any friends yet.
Latest Visitors
-
Guest
04/11/2007, 05:42
Topics I've Started
Sql Injection? Cross Site Scripting?
10/03/2006, 23:26
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
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
- Fórum WMO
- → Viewing Profile: Tópicos: marsil
- Privacy Policy
- Regras ·