Ga naar inhoud

XMF-verzoek

De klasse Xmf\Request biedt gecontroleerde toegang tot HTTP-verzoekvariabelen met ingebouwde opschoning en typeconversie. Het beschermt standaard tegen potentieel schadelijke injecties terwijl de invoer voldoet aan gespecificeerde typen.

Het afhandelen van verzoeken is een van de meest veiligheidskritische aspecten van webontwikkeling. De XMF Request-klasse:

  • Reinigt automatisch de invoer om XSS-aanvallen te voorkomen
  • Biedt typeveilige accessors voor veelgebruikte gegevenstypen
  • Ondersteunt meerdere verzoekbronnen (GET, POST, COOKIE, enz.)
  • Biedt consistente verwerking van standaardwaarden
use Xmf\Request;
// Get string input
$name = Request::getString('name', '');
// Get integer input
$id = Request::getInt('id', 0);
// Get from specific source
$postData = Request::getString('data', '', 'POST');

Retourneert de HTTP-verzoekmethode voor het huidige verzoek.

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

getVar($name, $default, $hash, $type, $mask)

Section titled “getVar($name, $default, $hash, $type, $mask)”

De kernmethode die door de meeste andere get*()-methoden wordt aangeroepen. Haalt een benoemde variabele op uit aanvraaggegevens en retourneert deze.

Parameters:

  • $name - Variabelenaam die moet worden opgehaald
  • $default - Standaardwaarde als variabele niet bestaat
  • $hash - Bronhash: GET, POST, FILES, COOKIE, ENV, SERVER, METHOD of REQUEST (standaard)
  • $type - Gegevenstype voor opschonen (zie FilterInvoertypen hieronder)
  • $mask - Bitmasker voor reinigingsopties

Maskerwaarden:

MaskerconstanteEffect
MASK_NO_TRIMVoorloop/achterliggende witruimte niet trimmen
MASK_ALLOW_RAWOpschonen overslaan, onbewerkte invoer toestaan ​​
MASK_ALLOW_HTMLSta een beperkte “veilige” set HTML-markeringen toe
// Get raw input without cleaning
$rawHtml = Request::getVar('content', '', 'POST', 'STRING', Request::MASK_ALLOW_RAW);
// Allow safe HTML
$content = Request::getVar('body', '', 'POST', 'STRING', Request::MASK_ALLOW_HTML);

Retourneert een geheel getal. Alleen cijfers zijn toegestaan.

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

Retourneert een float-waarde. Alleen cijfers en punten toegestaan.

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

Retourneert een Booleaanse waarde.

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

Retourneert een tekenreeks met alleen letters en onderstrepingstekens [A-Za-z_].

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

Retourneert een opdrachtreeks met alleen [A-Za-z0-9.-_], geforceerd in kleine letters.

$op = Request::getCmd('op', 'list');
// Input "View_Item" becomes "view_item"

Retourneert een opgeschoonde tekenreeks waaruit de slechte HTML-code is verwijderd (tenzij deze wordt overschreven door een masker).

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

Retourneert een array, recursief verwerkt om XSS en slechte code te verwijderen.

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

Retourneert onbewerkte tekst zonder opschoning. Wees voorzichtig.

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

Retourneert een gevalideerde web-URL (alleen relatieve, http- of https-schema’s).

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

Retourneert een gevalideerd bestandssysteem of webpad.

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

Retourneert een gevalideerd e-mailadres of het standaardadres.

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

Retourneert een gevalideerd IPv4- of IPv6-adres.

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

Retourneert een HTTP-aanvraagheaderwaarde.

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

Controleer of er een variabele bestaat in de opgegeven hash.

if (Request::hasVar('submit', 'POST')) {
// Form was submitted
}
if (Request::hasVar('id', 'GET')) {
// ID parameter exists
}

Stel een variabele in de opgegeven hash in. Retourneert de vorige waarde of null.

// Set a value
$oldValue = Request::setVar('processed', true, 'POST');
// Only set if not already exists
Request::setVar('default_op', 'list', 'GET', false);

Retourneert een opgeschoonde kopie van een volledige hash-array.

// Get all POST data cleaned
$postData = Request::get('POST');
// Get all GET data
$getData = Request::get('GET');
// Get REQUEST data with no trimming
$requestData = Request::get('REQUEST', Request::MASK_NO_TRIM);

Stelt meerdere variabelen uit een array in.

$defaults = [
'page' => 1,
'limit' => 10,
'sort' => 'date'
];
Request::set($defaults, 'GET', false); // Don't overwrite existing

De klasse Request gebruikt Xmf\FilterInput voor het opschonen. Beschikbare filtertypen:

TypBeschrijving
ALPHANUM / ALNUMAlleen alfanumeriek
ARRAYMaak elk element recursief schoon
BASE64Base64-gecodeerde tekenreeks
BOOLEAN / BOOLWaar of niet waar
CMDCommando - A-Z, 0-9, onderstrepingsteken, streepje, punt (kleine letters)
EMAILGeldig e-mailadres
FLOAT / DOUBLEDrijvende-kommagetal
INTEGER / INTGeheel getal
IPGeldig IP-adres
PATHBestandssysteem of webpad
STRINGAlgemene tekenreeks (standaard)
USERNAMEGebruikersnaamformaat
WEBURLWeb URL
WORDAlleen letters A-Z en onderstrepingstekens
use Xmf\Request;
if ('POST' === Request::getMethod()) {
// Validate form submission
$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;
// Verify AJAX request
$isAjax = (Request::getHeader('X-Requested-With', '') === 'XMLHttpRequest');
if ($isAjax) {
$action = Request::getCmd('action', '');
$itemId = Request::getInt('item_id', 0);
switch ($action) {
case 'delete':
// Handle delete
break;
case 'update':
$data = Request::getArray('data', []);
// Handle update
break;
}
}
use Xmf\Request;
$page = Request::getInt('page', 1);
$limit = Request::getInt('limit', 20);
$sort = Request::getCmd('sort', 'date');
$order = Request::getWord('order', 'DESC');
// Validate ranges
$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', '');
// Build search criteria
$criteria = new CriteriaCompo();
if (!empty($query)) {
$criteria->add(new Criteria('title', '%' . $query . '%', 'LIKE'));
}
if ($category > 0) {
$criteria->add(new Criteria('category_id', $category));
}
  1. Gebruik altijd typespecifieke methoden - Gebruik getInt() voor ID’s, getEmail() voor e-mails, enz.

  2. Zorg voor verstandige standaardinstellingen - Ga er nooit van uit dat er invoer bestaat

  3. Valideren na sanering - Sanering verwijdert slechte gegevens, validatie zorgt voor correcte gegevens

  4. Gebruik de juiste hash - Specificeer POST voor formuliergegevens, GET voor queryparameters

  5. Vermijd onbewerkte invoer - Gebruik getText() of MASK_ALLOW_RAW alleen wanneer dit absoluut noodzakelijk is

// Good - type-specific with default
$id = Request::getInt('id', 0);
// Bad - using getString for numeric data
$id = (int) Request::getString('id', '0');
  • Aan de slag met XMF - Basisconcepten van XMF
  • XMF-Module-Helper - Modulehelperklasse
  • ../XMF-Framework - Kaderoverzicht

#xmf #request #security #input-validatie #sanitization