Dreams Arts Design

Bem-vindo ao Dreams Art's Design. Para poder utilizar todos os atributos deste fórum, será necessário que você crie uma conta de usuário. O cadastro é gratuito e leva pouco tempo para ser preenchido. Após o cadatro você estara automaticamente fazendo parte do grupo Dreams Arts Design e terá acesso a recursos exclusivos para membros. Registre-se e participe!

Atenciosamente, Equipe Dreams Arts Design


Participe do fórum, é rápido e fácil

Dreams Arts Design

Bem-vindo ao Dreams Art's Design. Para poder utilizar todos os atributos deste fórum, será necessário que você crie uma conta de usuário. O cadastro é gratuito e leva pouco tempo para ser preenchido. Após o cadatro você estara automaticamente fazendo parte do grupo Dreams Arts Design e terá acesso a recursos exclusivos para membros. Registre-se e participe!

Atenciosamente, Equipe Dreams Arts Design

Dreams Arts Design

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Dreams Arts Design
ATENÇÃO: Vamos mudar toda a estrutura do site, semana que vem o mesmo ficara OFF para realização da mudança. Em breve vocês terão nova areas no fórum. Espero que gostem.

3 participantes

    Segurança Em Php - Evitando o mysql_injection

    Douglas Pereira
    Douglas Pereira
    O futuro dependerá daquilo que fazemos no presente.
    O futuro dependerá daquilo que fazemos no presente.


    Segurança Em Php - Evitando o mysql_injection 2zodsv6
    Mensagens : 2776
    Pontos : 10961
    Data de inscrição : 12/05/2009
    Respeito às regras. : Segurança Em Php - Evitando o mysql_injection 11101010
    Idade : 16
    Localização : Recife- Pe

    Segurança Em Php - Evitando o mysql_injection Empty Segurança Em Php - Evitando o mysql_injection

    Mensagem por Douglas Pereira Sex Out 15, 2010 7:36 pm

    A Injeção de SQL, mais conhecida através do termo americano SQL Injection, é um tipo de ameaça de segurança que se aproveita de falhas em sistemas que interagem com bases de dados via SQL. Deste modo a chamada injeção de SQL ocorre quando o atacante consegue inserir uma série de instruções SQL dentro de uma consulta (query) através da manipulação das entrada de dados de uma aplicação.

    Para exemplificar o funcionamento da injeção de SQL, consideremos uma instrução SQL comum:

    Código:
    SELECT id, nome, sobrenome FROM autores;

    Essa instrução, que representa uma consulta na base de dados, retorna todas os registros das colunas "id", "nome" e "sobrenome" da tabela "autores". A partir desta mesma instrução, os registros a serem retornados podem ser restritos através da inclusão da cláusula WHERE, como é visto abaixo:

    Código:
    SELECT id, nome, sobrenome FROM autores WHERE nome = 'josé' AND sobrenome = 'silva';

    Com base nesta instrução, é fácil supor que "josé" e "silva" são strings, cujo conteúdo será preenchido pela entrada feita por algum usuário que estiver fazendo uso da aplicação.

    Portanto, supondo que a aplicação não faça o tratamento apropriado do conteúdo inserido pelo usuário, o mesmo pode fazer o uso acidental do caractere de aspas simples. Gerando a entrada:

    nome = jo'sé
    sobrenome = silva

    E fazendo com que a aplicação gere o código:
    SELECT id, nome, sobrenome FROM autores WHERE nome = 'jo'sé' AND sobrenome = 'silva';
    De acordo com a especificação da linguagem SQL, existe um erro de sintaxe nessa instrução, uma vez que a string passada para o campo nome é a apenas palavra "jo", pois a adição das aspas simples quebraram a delimitação das aspas simples originais da consulta. O interpretador do SQL espera que o restante da instrução seja outros comandos SQL válidos que complementem a instrução principal. No entanto, como "sé" não é um identificador válido, essa instrução não será executada e retornará um erro.
    Com base neste problema, um possível atacante pode manipular os dados de entrada a fim de gerar um comportamento não esperado na base de dados.
    Para exemplificar este conceito, consideremos na mesma consulta apresentada, a entrada dos seguintes dados pela aplicação:

    nome = jo'; DROP TABLE autores ; --
    sobrenome = silva

    Fazendo com que a aplicação gere o código:

    Código:
    SELECT id, nome, sobrenome FROM autores WHERE nome = 'jo'; DROP TABLE autores ; --' AND sobrenome = 'silva';

    Fonte:Wikipedia

    -----------------------------------

    Depois do termo técnico retirado da wiki, vamos ver como nos prevenir deste tipo de ataque.

    PRIMEIRO PASSO.
    Crie um arquivo PHP chamado anti_injection.php e vamos programar nele:

    Código:
    <?php
    //****************************************************

    // @Arquivo: anti_injection.php
    // @Data de criação: 15/04/2010
    // @Autor: Alex Giroto
    // @Email: girottoalex@gmail.com
    // @Website: www.oxygenweb.com.br

    //****************************************************

    funtion anti_injection($sql){

    //Primeiro precisamos remover as palavras que contenhão sintaxe SQL
    $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);

    //Depois limpamos os espaços vazios
    $sql = trim($sql);

    //Removemos as tags HTML
    $sql = strip_tags($sql);

    //E adicionamos uma barra invertida a uma string
    $sql = addslashes($sql);

    }//fim do function

    ?>

    SEGUNDO PASSO.
    Feito isso, nossa função que nos previne desses ataques esta criada. Passamos agora para como usaremos isto, crie outro arquivo complementar em PHP chamado form.php:

    Código:
    <?php

    //****************************************************

    // @Arquivo: form.php
    // @Data de criação: 15/04/2010
    // @Autor: Alex Giroto
    // @Email: girottoalex@gmail.com
    // @Website: www.oxygenweb.com.br

    //****************************************************

    ?>

    <html>

      <head>
        <title>Teste de anti_injection</title>
      </head>

      <body>
        <form action="recebe.php" method="POST">
          Digite seu nome:<br>
          <input type="text" name="nome" id="nome"><br>
          <input name="envia" id="envia" type="submit" value="salvar">
        </form>
      </body>

    </html>


    TERCEIRO PASSO.
    Criamos um formulário simples onde o usuário digita apenas seu nome, e ao enviar o form busca um arquivo chamado recebe.php vamos cria-lo e aplicar nossa função de anti_injection:

    Código:
    <?php

    // @Arquivo: recebe.php
    // @Data de criação: 15/04/2010
    // @Autor: Alex Giroto
    // @Email: girottoalex@gmail.com
    // @Website: www.oxygenweb.com.br

    //****************************************************

    //Primeiro importamos o arquivo protegera nossa aplicação do mysql_injection
    require_once("anti_injection.php");

    //Agora recebemos o dado nome enviado pelo form, e aplicamos a função de segurança nele
    $meuNome = anti_injection($_POST['nome']);

    // Continue seu código...

    ?>

    Simples e fácil, sua aplicação esta mais segura agora, se você sempre usar esta função de segurança ao receber as variáveis de algum formulário. Espero que gostem, e que seja útil para todos vocês! Abraço galera!

    Tutorial por: alexgiroto

    Myth
    Myth
    Designer
    Designer


    Segurança Em Php - Evitando o mysql_injection 2zodsv6
    Mensagens : 225
    Pontos : 5559
    Data de inscrição : 17/12/2009
    Respeito às regras. : Segurança Em Php - Evitando o mysql_injection 11101010
    Idade : 30
    Localização : Salvador/BA

    Segurança Em Php - Evitando o mysql_injection Empty Re: Segurança Em Php - Evitando o mysql_injection

    Mensagem por Myth Sex Out 15, 2010 7:40 pm

    Legal cara.. bem inteligente o uso do SQL para prevenir o ataque. Ainda sim existem alguns revisores, que procuram erros de sintaxe em códigos como esses... Mas essa solução parece ser a mais viável, afinal, você não tem o trabalho de sempre passar o revisor, e nem tem o perigo de acontecer, com algum erro mascarado.
    Muito bom...
    Valeu por compartilhar doug! okkk
    Neeto
    Neeto
    Amigo Do D.A Ex-Staff
    Amigo Do D.A Ex-Staff


    Segurança Em Php - Evitando o mysql_injection Fv8l81
    Mensagens : 72
    Pontos : 5161
    Data de inscrição : 09/08/2010
    Respeito às regras. : Segurança Em Php - Evitando o mysql_injection 11101010
    Idade : 31
    Localização : 127.0.0.1

    Segurança Em Php - Evitando o mysql_injection Empty Re: Segurança Em Php - Evitando o mysql_injection

    Mensagem por Neeto Seg Out 25, 2010 4:42 pm

    Muito bom, esse tutorial.
    Já que eu sei explorar algumas falhas para ataque :zr:
    Espero que ninguem veja pra não acabar com a festa HAHA!
    Douglas Pereira
    Douglas Pereira
    O futuro dependerá daquilo que fazemos no presente.
    O futuro dependerá daquilo que fazemos no presente.


    Segurança Em Php - Evitando o mysql_injection 2zodsv6
    Mensagens : 2776
    Pontos : 10961
    Data de inscrição : 12/05/2009
    Respeito às regras. : Segurança Em Php - Evitando o mysql_injection 11101010
    Idade : 16
    Localização : Recife- Pe

    Segurança Em Php - Evitando o mysql_injection Empty Re: Segurança Em Php - Evitando o mysql_injection

    Mensagem por Douglas Pereira Seg Out 25, 2010 5:59 pm

    Neeto escreveu:Muito bom, esse tutorial.
    Já que eu sei explorar algumas falhas para ataque :zr:
    Espero que ninguem veja pra não acabar com a festa HAHA!

    :rock:


    :confused:

    Conteúdo patrocinado


    Segurança Em Php - Evitando o mysql_injection Empty Re: Segurança Em Php - Evitando o mysql_injection

    Mensagem por Conteúdo patrocinado


      Data/hora atual: Sex Abr 26, 2024 11:18 pm