Ir para conteúdo
Fórum Script Brasil
  • 0

Php E Sql Injection


renatodex

Pergunta

Olá pessoal, eu estou postando aqui pois estou elaborando um sistema em php de cadastro. É algo simples, porém complicado. Digo isso pois além de um cadastro, o sistema envolve a inserção de um usuário em um servidor de game e tenho medo que a falta da inserção de rotinas para impedir injections façam com que o usuário acabe tendo acesso total ao banco de dados. wink.gif

Eu queria que vocês me explicassem o que é isso e o que pode acontecer caso eu não prevenha o Injection com script. Eu sei sobre o assunto superficialmente mais não creio que esteja apto para elaborar um script sem conhecer melhor sobre o assunto. rolleyes.gif

Então por fim eu gostaria que alguém me desse um empurão inicial sobre por onde começar para que eu pudesse evitar as falhas de injection no meu script de cadastro. Agradeço desde já! tongue.gif

smile.gif

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

primeira coisa antes de evitar você precisa saber o que é sql injection

e sql injection é comandos sql, se seu sistema não ta bem protegido qualquer um pode injetar um comando sql e fazer o que quiser no seu banco, para evitar isso

você precisa entender porque esses comandos são aceitos pelo seu sistema

exemplo você tem um login nome, senha e seu sql é +- assim:

select * from tabela where nome = '$nome' and senha = '$senha'

no sql o apostrofo(') é um limitador de strings então ele pode ser usado para inserir comandos veja um sql injection:

select * from tabela where nome = '1' or 1= '1' and senha = '1' or 1= '1'

olhe o que eu fiz eu apenas substitui as variaveis por 1' or 1= '1

e para o sistema foi pedido isso:

selecione tudo da tabela onde nome = '1' ou 1= '1' e senha = '1' ou 1= '1'

resumindo essa consulta sempre ira retornar verdadeira porque sempre 1=1 sera verdadeiro dai a pessoa passou pelo seu sistema de login

dai para evitar esse tipo de ataque você usa http://br.php.net/addslashes

o addslashes adiciona uma barra antes das aspas e apostrofos ficando assim:

select * from tabela where nome = '1\' or 1= \'1' and senha = '1\' or 1= \'1'

dai não tera mais efeito essa consulta e retornara falso

outra coisa importante é você proteger também contra caracteres de comentario do mysql exemplo -- ou # se a pessoa insere esses caracteres tudo que for escrito depois sera tratado como comentario e não como comando

outro caracter também é o ; ele encerra um comando para você executar outro

dai basicamente você deve proteger contra ( ' ; # -- )

e se tiver usando php4 use o addslashes e use senhas com criptografia md5

e no php 5 você pode usar mysqli_real_escape_string()

mas você escapando apostrofos e usando md5 já fica bem seguro seu sistema

e para evitar que alguém zoe no seu cadastro você deve progeter contra tag html usando strip_tags()

Link para o comentário
Compartilhar em outros sites

  • 0

tipo, eu usei o comando ctype_alnum, de acordo com o manual ele verifica se a string contem caracteres que não são nem letras nem numeros e retorna um valor boleano.

ai eu fiz uma condicao do tipo:

if(!ctype_alnum($campo)) {

echo "Pára";

} else {

echo "Continua";

}

No campo, eu também fiz isso:

$campo = trim(addslashes($_POST["campo"]));

Claro que eu também vou criptografar tudo em MD5, se bem que já ouvi falar de pessoas que já conseguiram descritografar (acho que isso deve demorar um belo tempo!)

E então, tudo isso resolve?

Link para o comentário
Compartilhar em outros sites

  • 0

renatodex não precisa fazer essa verificação basta escapar os apostrofos ,fazer essa verificação é perda de tempo o que importa é proteger e não limitar

GiVeNs mesma coisa se você protege não tem porque se preoculpar com o tamanho do texto claro que você pode limitar um minimo se quiser mas não pra isso

imagina um textarea então

fazendo do jeito que eu expliquei acima já resolve o problema

e usando php5 tem outros recursos como passar os dados como parametros

Link para o comentário
Compartilhar em outros sites

  • 0

Bom fabyo num é bem assim.

Como eu disse no começo é um servidor de Game. E eu não posso deixar com que o usuário cadastre sua conta com caracteres corings como % e *. O servidor não está preparado para receber tais informações e para impedir danos no meu emulador eu fiz a verificação com ctype. Além do mais, só utilizando esse comando ele não vai poder nem digitar ', nem digitar ", nem digitar /, nem digitar nada, que não seja numero ou letra, acho que isso acaba com qualquer injection..não é??

Vlw!

smile.gif

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...