renpanvil 7 Denunciar post Postado Setembro 23, 2015 Olá galera. Venho aqui entre vocês não só para perguntar a vocês mais para ajuda-los em algo. 1 ajudando: Descobri uma como fazer uma consulta em PDO em apenas uma linha segue abaixo. <?php $variavel = $conn->query('SELECT * FROM tabela WHERE 1'); ?> Eu testei e funciona. 2 pedindo ajuda: Meu objetivo principal utilizando PDO é prezar pela segurança no meu código, não sei se com essa opção usando 'query' eu mantenho todo a segurança do pdo. Segue um exemplo de select com PDO 100% segura <?php $sql = 'SELECT * FROM :table WHERE id = :id'; try{ $consulta_sql = $conn->prepare($sql); $consulta_sql->bindValue(':table', $tabela, PDO::PARAM_STR); $consulta_sql->bindValue(':id', $id, PDO::PARAM_INT); $consulta_sql->execute(); } catch (PDOException $e) { echo $e->getMessage(); } ?> O bindValue até onde eu sei que é o mestre da segurança no PDO. Então é correto afirmar que consultas sem ele não seriam seguras? exemplo de conexão sem o bindValue: <?php $dados= array($dado, $id); try{ $consulta = $db->prepare('UPDATE tabela SET `dado`= ? WHERE id= ?'); $consulta->execute($dados); } catch (PDOException $e) { echo $e->getMessage(); } ?> Galera só para resumir se ficou meio confuso. O primeiro exemplo é um código curto para uma query no banco de dados e minha dúvida é se é seguro utiliza-lo ou utiliza-lo não é uma boa prática se possível o porque. No exemplo 2 é um bloco de PDO utilizando bindValue que até onde eu sei é oque torna as conexões via PDO seguras e a prova de SQL injection, é o código que eu uso. No exemplo 3 está um exemplo que torna mais rápido a inserção dos dados utilizando um array dentro do 'execute', porém também tenho dúvidas se essa forma é segura e se é uma boa prática. Fico no aguardo da ajuda, obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Setembro 23, 2015 Primeiro entenda o básico: o que torna inseguro as transações com BD é o SQL Injection, ou seja, "enganar" o BD e fazer ele interpretar como comando algo que deveria ser uma simples string. Se você não vai utilizar nada que vem do usuário (post, get, request, etc), você pode utilizar normalmente o "query", pois não há risco, na realidade você pode utilizar ele com dados confiáveis vindos do usuário, por exemplo, o usuário passará um número inteiro, logo, se você forçar o tipo, você terá certeza que mesmo a informação vindo do usuário, ela será um número inteiro. No caso geral, se você não tem certeza do que o usuário vai enviar, ou se ele poderá enviar qualquer coisa, ai sim você deverá utilizar o prepared statement, veja que não é o PDO que garante a sua segurança, o que garante a segurança é o uso do prepared statement, no caso o "bindValue" é onde você está "montando" o prepared statement, assim como poderia ser utilizado o bindParam também e etc... Quanto ao terceiro caso, não me lembro como ele funciona internamente, já que não utilizo por entender que dificulta a manutenção/leitura. Em todo caso nem tudo são flores e existem muitos "poréns" que você tem que estar atento, recomendo a leitura a este tópico: http://stackoverflow.com/questions/134099/are-pdo-prepared-statements-sufficient-to-prevent-sql-injection Principalmente à segunda resposta mais reputada. Compartilhar este post Link para o post Compartilhar em outros sites
renpanvil 7 Denunciar post Postado Setembro 24, 2015 Primeiramente Obrigado por sua resposta Eserra, Na verdade o básico eu já sei, costumo validar dados vindos do usuário, normalmente meus sistemas tem validação em JS, PHP e um filtro em trim() e strip_tags() antes de receber qualquer dado do usuário, também tenho conhecimento de como é feito os ataques a sistemas. Sobre o bindValue posso ta falando besteira mais até onde eu sei ele também é uma "validação" através do PDO::PARAM_STR ou PDO::PARAM_INT você já está validando por exemplo se é uma string ou um inteiro. Bom minha dúvida principal era se algum desses métodos era de alguma forma inseguro, se não são preciso saber qual você mais recomenda como "BOA PRATICA". Muito obrigado pelo feedback Compartilhar este post Link para o post Compartilhar em outros sites
ESerra 744 Denunciar post Postado Setembro 24, 2015 Leia no link que eu passei, nele o usuário fez um resumo de tudo que eu acho que é importante saber de fato. Compartilhar este post Link para o post Compartilhar em outros sites