Segurança de aplicações PHP: top 10 vulnerabilidades e proteção

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 e métodos de proteção



O PHP continua sendo uma das linguagens mais populares para desenvolvimento web, no entanto, sua flexibilidade muitas vezes resulta em vulnerabilidades. De acordo com relatórios de segurança, mais de 70% das aplicações web possuem pelo menos uma vulnerabilidade crítica. Neste artigo, analisaremos as 10 vulnerabilidades PHP mais perigosas, forneceremos exemplos reais de código e mostraremos como proteger efetivamente sua aplicação.



1. SQL Injection

A vulnerabilidade mais comum e perigosa. Um invasor pode injetar código SQL arbitrário através da entrada do usuário.



Código vulnerável:

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


Proteção: uso de Prepared Statements:

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


2. XSS (Cross-Site Scripting)

Injeção de scripts maliciosos em páginas web. Existem três tipos: refletido, armazenado e DOM-based.



Código vulnerável:

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


Proteção: escape de saída:

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


3. CSRF (Cross-Site Request Forgery)

Ataque no qual o invasor força o usuário a executar ações indesejadas em um site onde ele está autenticado.



Proteção: uso de tokens CSRF:

<?phpsession_start();if (empty($_SESSION['csrf_token'])) {    $_SESSION['csrf_token'] = bin2hex(random_bytes(32));}

// Verificação ao enviar o formulárioif ($_POST['csrf_token'] !== $_SESSION['csrf_token']) { die('Ataque CSRF detectado!');}?>

<form method="POST"> <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>"> <button type="submit">Enviar</button></form>


4. Path Traversal

Vulnerabilidade que permite ler arquivos arbitrários no servidor.



Código vulnerável:

<?php$file = $_GET['file'];include("pages/" . $file);?>


Proteção: validação e restrição de caminhos:

<?php$allowed_files = ['about.php', 'contact.php', 'home.php'];$file = basename($_GET['file']);

if (in_array($file, $allowed_files)) { include("pages/" . $file);} else { die('Acesso negado');}?>


5. File Upload

O upload inseguro de arquivos pode levar à execução de código arbitrário no servidor.



Proteção: verificação do tipo MIME e extensão:

<?php$allowed_types = ['image/jpeg', 'image/png', 'image/gif'];$max_size = 5 * 1024 * 1024; // 5 MB

if ($_FILES['file']['size'] > $max_size) { die('Arquivo muito grande');}

$finfo = finfo_open(FILEINFO_MIME_TYPE);$mime_type = finfo_file($finfo, $_FILES['file']['tmp_name']);

if (!in_array($mime_type, $allowed_types)) { die('Tipo de arquivo não permitido');}

// Renomeamos o arquivo por segurança$extension = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);$new_name = md5(uniqid()) . '.' . $extension;move_uploaded_file($_FILES['file']['tmp_name'], 'uploads/' . $new_name);?>


6. Session Fixation

Ataque no qual o invasor impõe ao usuário um identificador de sessão conhecido.



Proteção: regeneração do ID da sessão:

<?phpsession_start();

// Após autenticação bem-sucedidai

Blogs

Book Recommendations