-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Oriol edited this page Nov 19, 2025
·
1 revision
Aquest projecte PHP demostra les millors pràctiques per prevenir atacs d'injecció de codi, incloent SQL injection, XSS (Cross-Site Scripting), i altres vulnerabilitats similars.
// CONNEXIÓ SEGURA AMB PDO
$db = new PDO('mysql:host=localhost;dbname=exemple;charset=utf8', 'usuari', 'contrasenya');
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// CONSULTA PREPARADA
$stmt = $db->prepare("SELECT * FROM usuaris WHERE email = :email");
$stmt->execute(['email' => $email]);
$usuari = $stmt->fetch();Alternativa amb MySQLi:
$stmt = $mysqli->prepare("SELECT * FROM usuaris WHERE email = ?");
$stmt->bind_param("s", $email);
$stmt->execute();// ESCOMBRA ELS VALORS ABANS DE MOSTRAR-LOS
echo htmlspecialchars($input_usuari, ENT_QUOTES, 'UTF-8');
// PER URLS
echo urlencode($input_usuari);// VALIDACIÓ D'EMAIL
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
throw new Exception("Format d'email invàlid");
}
// VALIDACIÓ DE NOMBRES ENTERS
$id = filter_var($_GET['id'], FILTER_VALIDATE_INT);
if ($id === false) {
throw new Exception("ID ha de ser un nombre enter");
}<?php
// config.php - Configuració de la base de dades
define('DB_HOST', 'localhost');
define('DB_NAME', 'aplicacio_segura');
define('DB_USER', 'usuari_segur');
define('DB_PASS', 'contrasenya_complexa');
// database.php - Classe per gestionar la base de dades
class Database {
protected $connection;
public function __construct() {
$dsn = 'mysql:host='.DB_HOST.';dbname='.DB_NAME.';charset=utf8';
$options = [
PDO::ATTR_EMULATE_PREPARES => false,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];
try {
$this->connection = new PDO($dsn, DB_USER, DB_PASS, $options);
} catch (PDOException $e) {
die("Error de connexió: " . $e->getMessage());
}
}
public function getUsuariSegur($id) {
$stmt = $this->connection->prepare("SELECT id, nom, email FROM usuaris WHERE id = ?");
$stmt->execute([$id]);
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}
// user.php - Classe per gestionar usuaris
class User {
public static function mostrarPerfil($id) {
$db = new Database();
$usuari = $db->getUsuariSegur($id);
if ($usuari) {
// Escapar totes les sortides
$nom = htmlspecialchars($usuari['nom'], ENT_QUOTES, 'UTF-8');
$email = htmlspecialchars($usuari['email'], ENT_QUOTES, 'UTF-8');
echo "<h1>Perfil de {$nom}</h1>";
echo "<p>Email: {$email}</p>";
} else {
echo "<p>Usuari no trobat</p>";
}
}
}
// Ús segur
$id_usuari = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
if ($id_usuari) {
User::mostrarPerfil($id_usuari);
} else {
echo "ID d'usuari invàlid";
}
?>Aquest wiki proporciona una base sòlida per desenvolupar aplicacions PHP segures contra injecció de codi.