Jump to content
Fórum Script Brasil
  • 0

tenho uma duvida sobre um código que fiz em phpoo.


uilquer daniel
 Share

Question

Fiz esse código, mais não protegi contra sql injection, a pergunta é: devo proteger a gravação de dados?Ou será que posso proteger apenas login e consultas no banco de dados?

essa classe grava dados de qualquer formulário, mais não consegui fazer ela protegendo o banco.

tentei usar o (prepare();) mais da erros se alguém souber como fazer me ajuda aí favor.

{

<?php

class trataDados {

var $db;
var $maxid;
var $fetch;
var $comparador;


        


function CPDO(){   
$this->db=new PDO('mysql:host=localhost;dbname=butterfly','root','');    
}


// esta funcão deve gravar dados de qualque formulario.
//os dados pedidos dentro da função são: (nome da tabela, variavel que traz dados do formulario get ou post, parametro de comparação ex:email).
//nesse caso não tem proteção contra mysql injection .


function gravarDados($tabela,$dados,$param){
    
    //primeiro fazemos a busca do campo qual queremos validare ex: se for email traz todos os email cadastrados;


         $buscaparam=$this->db->query("select $param from $tabela ");
         $parametro=$buscaparam->fetchALL(PDO::FETCH_OBJ);
         foreach($parametro as $paramfinal)
         { $this->comparador=
         $paramfinal->$param;
           }// fim foreach parametro

         //echo $this->comparador;

//agora fazemos a validação se compador for igual ao dados do formulario a inseção e parada e traz a mensagem para que o usuario troque o nome do dado.
         
         if($this->comparador == $_POST[$param]){
             echo'esse email já esta cadastrado';
             }
// se não da-se a continuação do cadastramento             
             else{
//como ods dados do formulario vem como array na variavel get ou post percorremos com laço foreach.                      
         foreach( $dados as $campo => $valor){
             
         $this->db->exec("INSERT INTO $tabela ($campo)values('$valor')");//insere o primeiro campo do formulario para criar o id do usuario;
         $fetch = $this->db->query("SELECT MAX(id) from $tabela"); //faz uma busca do ultimo id que foi inserido na tabela
         $id=$fetch->fetch(PDO::FETCH_OBJ);
         
            foreach($id as $maxid){
            $this->maxid=$maxid;// recebe o ultimo id inserido na tabela;
            } 
            
         break; // para o laço para que  não seja criado um id para cada dado da variavel que traz os dados do formulario

         }
        
         foreach($dados as $campo => $valor){
             //agora o update cuida de inserir todos os dados do formulario e fim todos os dados estao gravados;
         $this->db->exec("update $tabela set $campo='$valor' where id='$this->maxid'");
          }
          
      }//fim do else
                  
}//fim da função gravaDados
        
    
        
        
}//fim da classe
    

$tratadados=new trataDados();
$tratadados->CPDO();
$tratadados->gravarDados('clientes',$_POST, 'email'); 

 ?>


<form action="tratadados.php" method="post">

<input type="text" name="nome">
<input type="text" name="snome">
<input type="text" name="email">
<input type="submit" value="enviar">

</form>

Edited by uilquer daniel
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0
11 horas atrás, uilquer daniel disse:

devo proteger a gravação de dados?Ou será que posso proteger apenas login e consultas no banco de dados?

Você que deve responder. A Segurança do seu banco de dados é importante para você? Se for, proteja TODAS as consultas. Se não for, deixe de qualquer jeito...

Já que está usando PDO, basta implementar Prepared Statements e seu banco estará seguro e imune a SQL Injection. Veja: http://rberaldo.com.br/pdo-mysql/

E não use "var". Prefira os modificadores "public", "protected" e "private", para não ficar com código obsoleto

Link to comment
Share on other sites

  • 0
Em 17/12/2015 at 07:27, Beraldo disse:

Você que deve responder. A Segurança do seu banco de dados é importante para você? Se for, proteja TODAS as consultas. Se não for, deixe de qualquer jeito...

Já que está usando PDO, basta implementar Prepared Statements e seu banco estará seguro e imune a SQL Injection. Veja: http://rberaldo.com.br/pdo-mysql/

E não use "var". Prefira os modificadores "public", "protected" e "private", para não ficar com código obsoleto

 

sim mais o uso do prepared não deu certo nessa logica que usa um laço de repetição foreach gravando dados de qualquer formulário sem ter que definir em campo vai cada dado.

pode me dar uma dica sobre isso

Agora, uilquer daniel disse:

 

sim mais o uso do prepared não deu certo nessa logica que usa um laço de repetição foreach gravando dados de qualquer formulário sem ter que definir em campo vai cada dado.

pode me dar uma dica sobre isso

quanto a declaração de variáveis ainda vou fazer as mudanças e fazer encapsulamento mais antes quero resolver o problema com essa logica ai.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.6k
    • Total Posts
      646.2k
×
×
  • Create New...