Segurança de aplicações PHP: 10 principais vulnerabilidades para iniciantes

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

Segurança de aplicações PHP: top 10 vulnerabilidades para iniciantes



O PHP continua sendo uma das linguagens mais populares para desenvolvimento web, mas sua flexibilidade frequentemente causa sérios erros de segurança. Para um iniciante, é fácil deixar passar uma vulnerabilidade crítica que pode levar ao vazamento de dados ou à invasão completa do servidor. Neste artigo, vamos abordar as 10 vulnerabilidades mais comuns em aplicações PHP, mostrar exemplos de código perigoso e ensinar como se proteger corretamente. O material foi preparado especialmente para desenvolvedores iniciantes que desejam escrever código seguro desde o primeiro dia.



1. SQL Injection



Esta é a vulnerabilidade mais conhecida e perigosa. Ela ocorre quando a entrada do usuário é inserida diretamente em uma consulta SQL sem escape. Um invasor pode obter acesso ao banco de dados, alterar ou excluir dados.



Código perigoso:

<?php$id = $_GET['id'];$query = "SELECT * FROM users WHERE id = $id";$result = mysqli_query($conn, $query);?>


Como se proteger: Use prepared statements com PDO ou MySQLi.



<?php$stmt = $pdo->prepare("SELECT * FROM users WHERE id = :id");$stmt->execute(['id' => $_GET['id']]);?>


2. XSS (Cross-Site Scripting)



O XSS permite que um invasor injete código JavaScript malicioso em uma página que é exibida para outros usuários. Isso pode levar ao roubo de cookies de sessão ou ao redirecionamento para sites de phishing.



Código perigoso:

<?phpecho "Olá, " . $_GET['name'];?>


Como se proteger: Sempre escape a saída com htmlspecialchars().



<?phpecho "Olá, " . htmlspecialchars($_GET['name'], ENT_QUOTES, 'UTF-8');?>


3. CSRF (Cross-Site Request Forgery)



O ataque CSRF força um usuário autenticado a executar uma ação indesejada no site (por exemplo, alterar a senha ou transferir dinheiro). O ataque ocorre quando o usuário clica em um link em um site de terceiros.



Como se proteger: Use tokens CSRF para todos os formulários e requisições que alteram o estado.



<?phpsession_start();if (empty($_SESSION['csrf_token'])) {    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));}?><form method="POST">    <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">    <button type="submit">Excluir conta</button></form>


4. Manipulação insegura de arquivos



Permite que um invasor leia ou escreva arquivos arbitrários no servidor. Por exemplo, através de path traversal ou upload de shells PHP.



Código perigoso:

<?phpinclude($_GET['page'] . '.php');?>


Como se proteger: Nunca use entrada do usuário em caminhos de arquivos. Use listas brancas de valores permitidos.



<?php$allowed_pages = ['home', 'about', 'contact'];$page = $_GET['page'] ?? 'home';if (in_array($page, $allowed_pages)) {    include($page . '.php');} else {    include('404.php');}?>


5. Falhas de autenticação e gerenciamento de sessão



Senhas fracas, falta de proteção contra força bruta, fixação de sessão — tudo isso abre caminho para a captura de contas de usuário.



Recomendações:

  • Armazene senhas apenas de forma hash usando password_hash().
  • Use HTTPS para todas as páginas de login.
  • Regenere o ID da sessão após o login: session_regenerate_id(true).
  • Defina um tempo de vida curto para a sessão.


6. Insecure Direct Object Reference (IDOR)



ID

Blogs

Book Recommendations