Matheus Tavares 167 Denunciar post Postado Janeiro 28, 2018 8 horas atrás, Omar~ disse: Mesmo porque nada que a pessoa faça garante 100% de segurança. O que ele pode fazer e enfiar segurança por cima de segurança, que vai deixar a aplicação lenta e ainda não é totalmente confiável. Pior que isso tem um fundo de verdade... mesmo que sua aplicação esteja "blindada", às vezes o ambiente em que ela está inserida, o sistema, a versão do PHP/mysql, a rede ou alguma dependência está vulnerável. Bons exemplos de coisas que fogem do nosso controle são o Heartbleed e os últimos Spectre e Meltdown. O fato é: mesmo assim quase todos dessa lista podem ser estudados, melhorados e gerenciados até um certo nível. Por isso nunca devemos ser negligentes com a segurança do nosso app. 8 horas atrás, Omar~ disse: Como sugestão que é como uso uma classe Exeption personalizada que ofusca os erros Sim, você falou uma boa verdade aqui. Apenas silenciar os erros, como eu sugeri, não é a melhor solução, mas é mais fácil nesse assunto de PDO x segurança. O caminho correto é sempre tratar os erros e não silenciá-los, exatamente como você disse. Apenas para complementar caso alguém caia de paraquedas aqui: capture os erros a partir de exceções (PDO::ERRMODE_EXCEPTION) e não através de warnings (PDO::ERRMODE_WARNING). Esse cuidado com o ERRMODE de qualquer forma precisa existir. O error_reporting() também é uma definição importante nesse assunto. Compartilhar este post Link para o post Compartilhar em outros sites
BrunoBit 82 Denunciar post Postado Fevereiro 9, 2018 @Omar~ como que você ta ofuscando os erros em produção? Dei uma lida no seu código, mas não consegui compreender como você ta tratando isso, que no caso é disparar um erro personalizado pro usuário e em seguida fazer um log original do erro em um arquivo oculto. Compartilhar este post Link para o post Compartilhar em outros sites
Matheus Tavares 167 Denunciar post Postado Fevereiro 9, 2018 @BrunoBit, citando o código do Omar, em relação à conexão: try { if (self::$isConnect == null) { $dsn = 'mysql:host=' . self::$host . '; dbname=' . self::$data; $options = [PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES UTF8']; self::$isConnect = new PDO($dsn, self::$user, self::$pass, $options); } } catch (PDOException $error) { die("<br>Não foi possível conectar com o banco de dados!<br Descrição: {$error->getMessage()}<br>"); } Programa, tente (try) conectar com o PDO. Em caso de erros, capture (catch) o resultado, imprima-o e encerre (die) a execução. Procure por Exceptions e try/catch. Compartilhar este post Link para o post Compartilhar em outros sites
Omar~ 87 Denunciar post Postado Fevereiro 9, 2018 Fugiu do contexto.... Mas dúvida é dúvida. Exemplo da classe: Spoiler <?php class ConstException extends Exception { const MISC_RETURN = 0; const INVALID_ACESS = 1; const INVALID_POST = 2; const INVALID_PAGE = 3; const SYSTEM_ERROR = 4; } Exemplo de execução Spoiler <?php try { if ($session->user != 'admin') { throw new ConstException('X-X-X', ConstException::INVALID_ACESS); } } catch (ConstException $e) { switch ($e->getCode()) { case ConstException::INVALID_ACESS: /* Isso é para mostrar para o usuário alguma coisa sem revelar a ele * o que meu sistema está gerando */ echo "Você não tem altorização de acessar isso!"; /* Coloco aqui os métodos que vai fazer o resgistro de LOG * Assim sendo posso informar para o log o que de fato aconteceu e * só mostrar o texto acima para o usuário * Por exemplo o $e->getMessage() vai imprimir 'X-X-X' o mesmo que * foi definido anteriormente */ break; } } Mas não sei se tem jeito melhor de fazer. Só sei que inventei esse jeito na gabiarra e funciona muito bem para tratar de erros. Compartilhar este post Link para o post Compartilhar em outros sites