Segurança de aplicações PHP: top 10 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

\n

O PHP continua sendo uma das linguagens mais populares para desenvolvimento web, mas sua flexibilidade frequentemente resulta em vulnerabilidades se as regras básicas de segurança não forem seguidas. De acordo com a OWASP, a maioria das invasões ocorre devido a 10 erros típicos cometidos por desenvolvedores iniciantes. Neste artigo, analisaremos cada vulnerabilidade com exemplos reais de código e mostraremos como proteger sua aplicação.

\n\n

1. SQL Injection

\n

O ataque mais comum. O invasor insere código SQL malicioso através da entrada do usuário.

\n

Código vulnerável:

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

Proteção: Use prepared statements:

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

2. XSS (Cross-Site Scripting)

\n

Inserção de código JavaScript na página através de dados não validados.

\n

Código vulnerável:

\n
<?php\necho "Olá, " . $_GET['name'];\n?>
\n

Proteção: Escape a saída com htmlspecialchars():

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

3. CSRF (Cross-Site Request Forgery)

\n

Ataque onde o usuário executa ações indesejadas em seu próprio nome.

\n

Código vulnerável:

\n
<form action="/delete.php" method="POST">\n    <input type="submit" value="Excluir conta">\n</form>
\n

Proteção: Adicione um token CSRF:

\n
<?php\nsession_start();\n$_SESSION['csrf_token'] = bin2hex(random_bytes(32));\n?>\n<form action="/delete.php" method="POST">\n    <input type="hidden" name="csrf_token" value="<?= $_SESSION['csrf_token'] ?>">\n    <input type="submit" value="Excluir conta">\n</form>
\n\n

4. Armazenamento inseguro de senhas

\n

Armazenar senhas em texto puro ou com hashes obsoletos (MD5, SHA1).

\n

Código vulnerável:

\n
<?php\n$password = md5($_POST['password']);\n// ou\n$password = sha1($_POST['password']);\n?>
\n

Proteção: Use password_hash() e password_verify():

\n
<?php\n$hash = password_hash($_POST['password'], PASSWORD_BCRYPT);\n// Verificação:\nif (password_verify($input_password, $hash)) {\n    echo "Senha correta";\n}\n?>
\n\n

5. Manipulação insegura de arquivos (Local/Remote File Inclusion)

\n

Inclusão de arquivos através da entrada do usuário sem validação.

\n

Código vulnerável:

\n
<?php\ninclude($_GET['page'] . '.php');\n?>
\n

Proteção: Use uma lista branca de arquivos permitidos:

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

6. Configuração incorreta de sessões

\n

Uso de identificadores de sessão previsíveis ou ausência de regeneração.

\n

Código vulnerável:

\n
<?php\nsession_start();\n$_SESSION['user_id'] = $user_id;\n// A sessão não é regenerada após o login\n?>
\n

Proteção:

\n
<?php\nsession_start();\nsession_regenerate_id(true); // Regeneração do ID após o login\n$_SESSION['user_id'] = $user_id;\n?>
\n\n

7. Validação insuficiente de entrada

\n

Confiar em quaisquer dados do usuário.

\n

Có

Blogs

Book Recommendations