Aller au contenu

XMF Request

La classe Xmf\Request fournit un accès contrôlé aux variables de requête HTTP avec assainissement et conversion de type intégrés. Elle protège contre les injections potentiellement nuisibles par défaut tout en conformant l’entrée aux types spécifiés.

La gestion des requêtes est l’un des aspects les plus critiques pour la sécurité du développement web. La classe XMF Request:

  • Assainit automatiquement l’entrée pour prévenir les attaques XSS
  • Fournit des accesseurs sécurisés pour les types de données courants
  • Supporte plusieurs sources de requête (GET, POST, COOKIE, etc.)
  • Offre une gestion cohérente des valeurs par défaut
use Xmf\Request;
// Obtenir une entrée de chaîne
$name = Request::getString('name', '');
// Obtenir une entrée entière
$id = Request::getInt('id', 0);
// Obtenir à partir d'une source spécifique
$postData = Request::getString('data', '', 'POST');

Retourne la méthode de requête HTTP pour la requête actuelle.

$method = Request::getMethod();
// Retourne: 'GET', 'HEAD', 'POST', ou 'PUT'

La méthode centrale que la plupart des autres méthodes get*() invoquent. Récupère et retourne une variable nommée à partir des données de la requête.

Paramètres:

  • $name - Nom de la variable à récupérer
  • $default - Valeur par défaut si la variable n’existe pas
  • $hash - Hachage source: GET, POST, FILES, COOKIE, ENV, SERVER, METHOD, ou REQUEST (défaut)
  • $type - Type de données pour le nettoyage (voir les types FilterInput ci-dessous)
  • $mask - Masque de bits pour les options de nettoyage

Valeurs du masque:

Constante MasqueEffet
MASK_NO_TRIMNe pas supprimer les espaces de début/fin
MASK_ALLOW_RAWIgnorer le nettoyage, permettre l’entrée brute
MASK_ALLOW_HTMLPermettre un ensemble limité de balisage HTML “sûr”
// Obtenir l'entrée brute sans nettoyage
$rawHtml = Request::getVar('content', '', 'POST', 'STRING', Request::MASK_ALLOW_RAW);
// Permettre le HTML sûr
$content = Request::getVar('body', '', 'POST', 'STRING', Request::MASK_ALLOW_HTML);

Retourne une valeur entière. Seuls les chiffres sont autorisés.

$id = Request::getInt('id', 0);
$page = Request::getInt('page', 1, 'GET');

Retourne une valeur décimale. Seuls les chiffres et les points sont autorisés.

$price = Request::getFloat('price', 0.0);
$rate = Request::getFloat('rate', 1.0, 'POST');

Retourne une valeur booléenne.

$enabled = Request::getBool('enabled', false);
$subscribe = Request::getBool('subscribe', false, 'POST');

Retourne une chaîne avec seulement des lettres et des traits de soulignement [A-Za-z_].

$action = Request::getWord('action', 'view');

Retourne une chaîne de commande avec seulement [A-Za-z0-9.-_], forcée en minuscules.

$op = Request::getCmd('op', 'list');
// L'entrée "View_Item" devient "view_item"

Retourne une chaîne nettoyée avec le mauvais code HTML supprimé (sauf si remplacé par masque).

$title = Request::getString('title', '');
$description = Request::getString('description', '', 'POST');
// Permettre du HTML
$content = Request::getString('content', '', 'POST', Request::MASK_ALLOW_HTML);

Retourne un tableau, traité récursivement pour supprimer XSS et le mauvais code.

$items = Request::getArray('items', [], 'POST');
$selectedIds = Request::getArray('selected', []);

Retourne du texte brut sans nettoyage. À utiliser avec prudence.

$rawContent = Request::getText('raw_content', '');

Retourne une URL web validée (schémas relatifs, http ou https uniquement).

$website = Request::getUrl('website', '');
$returnUrl = Request::getUrl('return', 'index.php');

Retourne un chemin système de fichiers ou web validé.

$filePath = Request::getPath('file', '');

Retourne une adresse e-mail validée ou la valeur par défaut.

$email = Request::getEmail('email', '');
$contactEmail = Request::getEmail('contact', 'default@example.com');

Retourne une adresse IPv4 ou IPv6 validée.

$userIp = Request::getIP('client_ip', '');

Retourne une valeur d’en-tête de requête HTTP.

$contentType = Request::getHeader('Content-Type', '');
$userAgent = Request::getHeader('User-Agent', '');
$authHeader = Request::getHeader('Authorization', '');

Vérifie si une variable existe dans le hachage spécifié.

if (Request::hasVar('submit', 'POST')) {
// Le formulaire a été soumis
}
if (Request::hasVar('id', 'GET')) {
// Le paramètre ID existe
}

Définit une variable dans le hachage spécifié. Retourne la valeur précédente ou null.

// Définir une valeur
$oldValue = Request::setVar('processed', true, 'POST');
// Définir seulement si elle n'existe pas déjà
Request::setVar('default_op', 'list', 'GET', false);

Retourne une copie nettoyée d’un tableau de hachage entier.

// Obtenir toutes les données POST nettoyées
$postData = Request::get('POST');
// Obtenir toutes les données GET
$getData = Request::get('GET');
// Obtenir les données REQUEST sans trim
$requestData = Request::get('REQUEST', Request::MASK_NO_TRIM);

Définit plusieurs variables à partir d’un tableau.

$defaults = [
'page' => 1,
'limit' => 10,
'sort' => 'date'
];
Request::set($defaults, 'GET', false); // Ne pas remplacer l'existant

La classe Request utilise Xmf\FilterInput pour le nettoyage. Types de filtres disponibles:

TypeDescription
ALPHANUM / ALNUMAlphanumérique uniquement
ARRAYNettoyer récursivement chaque élément
BASE64Chaîne codée en base64
BOOLEAN / BOOLVrai ou faux
CMDCommande - A-Z, 0-9, trait de soulignement, tiret, point (minuscules)
EMAILAdresse e-mail valide
FLOAT / DOUBLENombre décimal
INTEGER / INTValeur entière
IPAdresse IP valide
PATHChemin système de fichiers ou web
STRINGChaîne générale (par défaut)
USERNAMEFormat nom d’utilisateur
WEBURLURL web
WORDLettres A-Z et trait de soulignement uniquement
use Xmf\Request;
if ('POST' === Request::getMethod()) {
// Valider la soumission du formulaire
$title = Request::getString('title', '');
$content = Request::getString('content', '', 'POST', Request::MASK_ALLOW_HTML);
$categoryId = Request::getInt('category_id', 0);
$tags = Request::getArray('tags', []);
$published = Request::getBool('published', false);
if (empty($title)) {
$errors[] = 'Title is required';
}
if ($categoryId <= 0) {
$errors[] = 'Please select a category';
}
}
use Xmf\Request;
// Vérifier la requête AJAX
$isAjax = (Request::getHeader('X-Requested-With', '') === 'XMLHttpRequest');
if ($isAjax) {
$action = Request::getCmd('action', '');
$itemId = Request::getInt('item_id', 0);
switch ($action) {
case 'delete':
// Gérer la suppression
break;
case 'update':
$data = Request::getArray('data', []);
// Gérer la mise à jour
break;
}
}
use Xmf\Request;
$page = Request::getInt('page', 1);
$limit = Request::getInt('limit', 20);
$sort = Request::getCmd('sort', 'date');
$order = Request::getWord('order', 'DESC');
// Valider les plages
$page = max(1, $page);
$limit = min(100, max(10, $limit));
$order = in_array($order, ['ASC', 'DESC']) ? $order : 'DESC';
$offset = ($page - 1) * $limit;
use Xmf\Request;
$query = Request::getString('q', '');
$category = Request::getInt('cat', 0);
$dateFrom = Request::getString('from', '');
$dateTo = Request::getString('to', '');
// Construire les critères de recherche
$criteria = new CriteriaCompo();
if (!empty($query)) {
$criteria->add(new Criteria('title', '%' . $query . '%', 'LIKE'));
}
if ($category > 0) {
$criteria->add(new Criteria('category_id', $category));
}
  1. Toujours utiliser des méthodes spécifiques au type - Utiliser getInt() pour les IDs, getEmail() pour les e-mails, etc.

  2. Fournir des valeurs par défaut sensées - Ne jamais supposer que l’entrée existe

  3. Valider après l’assainissement - L’assainissement supprime les mauvaises données, la validation assure les données correctes

  4. Utiliser le hachage approprié - Spécifier POST pour les données de formulaire, GET pour les paramètres de requête

  5. Éviter l’entrée brute - Utiliser getText() ou MASK_ALLOW_RAW uniquement quand absolument nécessaire

// Bon - spécifique au type avec défaut
$id = Request::getInt('id', 0);
// Mauvais - utiliser getString pour les données numériques
$id = (int) Request::getString('id', '0');
  • Getting-Started-with-XMF - Concepts XMF de base
  • XMF-Module-Helper - Classe d’aide du module
  • ../XMF-Framework - Aperçu du framework

#xmf #request #security #input-validation #sanitization