Principais erros de desenvolvedores PHP iniciantes: de A a Z

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Principais erros de desenvolvedores PHP iniciantes: de A a Z



PHP — uma das linguagens mais populares para desenvolvimento web, mas sua flexibilidade e baixa barreira de entrada frequentemente pregam peças nos iniciantes. Muitos desenvolvedores novatos cometem os mesmos erros, que levam a vulnerabilidades, lentidão no site ou simplesmente código ilegível. Neste artigo, vamos analisar os principais erros de desenvolvedores PHP — desde sintáticos até arquiteturais — e mostrar como corrigi-los.



1. Erros de segurança: injeções e XSS



SQL Injection



O erro mais comum e perigoso é inserir dados do usuário diretamente em uma consulta SQL. Nunca faça isso:



<?php// ❌ PERIGOSO: vulnerável a SQL Injection$id = $_GET['id'];$query = "SELECT * FROM users WHERE id = $id";$result = mysqli_query($conn, $query);?>


Um invasor pode passar id=1; DROP TABLE users-- e destruir o banco de dados. Sempre use prepared statements:



<?php// ✅ SEGURO: prepared statement$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");$stmt->bind_param("i", $_GET['id']);$stmt->execute();$result = $stmt->get_result();?>


Ataques XSS (Cross-Site Scripting)



Exibir dados do usuário sem escapamento é outro erro clássico de desenvolvedores PHP:



<?php// ❌ PERIGOSO: vulnerabilidade XSSecho "Olá, " . $_GET['name'];?>


Se o usuário passar ?name=<script>alert('XSS')</script>, o script será executado. Use a função htmlspecialchars():



<?php// ✅ SEGURO: escapamento HTMLecho "Olá, " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');?>


2. Problemas com tipos de dados e comparação



Coerção implícita de tipos



PHP é uma linguagem de tipagem fraca, e iniciantes frequentemente caem em comportamentos inesperados:



<?php// ❌ ERRO: coerção implícitavar_dump("123abc" == 123); // true! A string é convertida para númerovar_dump(0 == "string");   // true! A string é convertida para 0?>


Use a comparação estrita === em vez de ==:



<?php// ✅ CORRETO: comparação estritavar_dump("123abc" === 123); // falsevar_dump(0 === "string");   // false?>


Confusão entre empty() e isset()



Muitos desenvolvedores PHP iniciantes não entendem a diferença entre essas funções:



<?php$var = 0;// ❌ ERRO: empty() considera 0 como valor vazioif (empty($var)) {    echo "A variável está vazia"; // Exibirá esta mensagem!}

// ✅ CORRETO: isset() verifica apenas a existênciaif (isset($var)) { echo "A variável existe e é igual a " . $var; // Exibirá "0"}?>


3. Más práticas com formulários e dados



Ignorar validação no servidor



Desenvolvedores iniciantes frequentemente confiam apenas na validação do lado do cliente (JavaScript), mas um invasor pode enviar uma requisição diretamente ao servidor. Sempre valide os dados no lado do servidor:



<?php// ❌ ERRO: sem validação no servidor$email = $_POST['email'];mail($email, "Assunto", "Mensagem"); // Pode enviar e-mail para qualquer endereço

// ✅ CORRETO: validamos o e-mail$email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);if ($email === false) { die("E-mail inválido");}mail($email, "Assunto", "Mensagem");?>


Manipulação incorreta de upload de arquivos



Outro erro típico de desenvolvedores PHP é salvar arquivos sem verificar a extensão e o tipo MIME:



<?php// ❌ PERIGOSO: pode fazer upload de um PHP shellmove_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $_FILES['file']['name']);

// ✅ SEGURO: verificamos a extensão$allowed = ['jpg

Blogs

Book Recommendations