Μετάβαση στο περιεχόμενο

XMFΑίτηση

Ο XMF\Request Η κλάση παρέχει ελεγχόμενη πρόσβαση σεHTTPμεταβλητές αιτήματος με ενσωματωμένη απολύμανση και μετατροπή τύπου. Προστατεύει από δυνητικά επιβλαβείς ενέσεις από προεπιλογή, ενώ συμμορφώνεται με τα δεδομένα εισόδου σε καθορισμένους τύπους.

Η διαχείριση αιτημάτων είναι μια από τις πιο κρίσιμες πτυχές της ανάπτυξης ιστού για την ασφάλεια. ΟXMFΑίτημα τάξης:

  • Απολυμαίνει αυτόματα την είσοδο για αποτροπήXSSεπιθέσεις
  • Παρέχει ασφαλή για τον τύπο αξεσουάρ για κοινούς τύπους δεδομένων
  • Υποστηρίζει πολλαπλές πηγές αιτημάτων (GET, POST, COOKIE, κλπ.)
  • Προσφέρει συνεπή χειρισμό προεπιλεγμένων τιμών
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');

getMethod()Επιστρέφει τοHTTPμέθοδο αίτησης για το τρέχον αίτημα.

Ενότητα με τίτλο «getMethod()Επιστρέφει τοHTTPμέθοδο αίτησης για το τρέχον αίτημα.»
$method = Request::getMethod();
// Returns: 'GET', 'HEAD', 'POST', or 'PUT'

Η βασική μέθοδος που οι περισσότερες άλλες get*() μέθοδοι που επικαλούνται. Ανακτά και επιστρέφει μια ονομασμένη μεταβλητή από τα δεδομένα αιτήματος.

Παράμετροι:

  • $name- Όνομα μεταβλητής προς ανάκτηση
  • $default- Προεπιλεγμένη τιμή εάν δεν υπάρχει μεταβλητή
  • $hash- Κατακερματισμός πηγής:GET, POST, FILES, COOKIE, ENV, SERVER, METHOD, ήREQUEST(προεπιλογή)
  • $type- Τύπος δεδομένων για καθαρισμό (δείτε τους τύπους εισόδου φίλτρου παρακάτω)
  • $mask- Bitmask για επιλογές καθαρισμού

Τιμές μάσκας:

Mask ConstantΕπίδραση
MASK_NO_TRIMΜην κόβετεleading/trailingκενό διάστημα
MASK_ALLOW_RAWΠαράλειψη καθαρισμού, επιτρέψτε την ακατέργαστη εισαγωγή
MASK_ALLOW_HTMLΕπιτρέψτε ένα περιορισμένο “ασφαλές” σύνολοHTMLσήμανση
// 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);

Επιστρέφει μια ακέραια τιμή. Επιτρέπονται μόνο ψηφία.

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

Επιστρέφει μια κινητή τιμή. Επιτρέπονται μόνο ψηφία και τελείες.

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

Επιστρέφει μια boolean τιμή.

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

Επιστρέφει μια συμβολοσειρά με μόνο γράμματα και κάτω παύλες [A-Za-z_].

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

Επιστρέφει μια συμβολοσειρά εντολών με μόνο [A-Za-z0-9.-_], αναγκαστικά σε πεζά.

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

Επιστρέφει μια καθαρισμένη συμβολοσειρά με κακήHTMLο κωδικός αφαιρέθηκε (εκτός εάν παρακαμφθεί από μάσκα).

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

Επιστρέφει έναν πίνακα, ο οποίος υποβάλλεται σε αναδρομική επεξεργασία για κατάργησηXSSκαι κακός κώδικας.

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

Επιστρέφει ακατέργαστο κείμενο χωρίς καθαρισμό. Χρησιμοποιήστε με προσοχή.

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

Επιστρέφει έναν επικυρωμένο ιστόURL(μόνο σχετικά, σχήματα http ή https).

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

Επιστρέφει ένα επικυρωμένο σύστημα αρχείων ή μια διαδρομή Ιστού.

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

Επιστρέφει μια επικυρωμένη διεύθυνση email ή την προεπιλεγμένη.

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

Επιστρέφει μια επικυρωμένη διεύθυνση IPv4 ή IPv6.

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

Επιστρέφει έναHTTPτιμή κεφαλίδας αιτήματος.

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

Ελέγξτε εάν υπάρχει μια μεταβλητή στον καθορισμένο κατακερματισμό.

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

Ορίστε μια μεταβλητή στον καθορισμένο κατακερματισμό. Επιστρέφει την προηγούμενη τιμή ή μηδενική.

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

Επιστρέφει ένα καθαρισμένο αντίγραφο ενός ολόκληρου πίνακα κατακερματισμού.

// 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);

Ορίζει πολλές μεταβλητές από έναν πίνακα.

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

Η κλάση Request χρησιμοποιεί XMF\FilterInput για καθαρισμό. Διαθέσιμοι τύποι φίλτρων:

ΤύποςΠεριγραφή
ALPHANUM / ALNUMΜόνο αλφαριθμητικό
ARRAYΚαθαρίστε αναδρομικά κάθε στοιχείο
BASE64Κωδικοποιημένη συμβολοσειρά Base64
BOOLEAN / BOOLΣωστό ή λάθος
CMDΕντολή - A-Z, 0-9, κάτω παύλα, παύλα, τελεία (πεζά)
EMAILΈγκυρη διεύθυνση email
FLOAT / DOUBLEΑριθμός κινητής υποδιαστολής
INTEGER / INTΑκέραια τιμή
IPΈγκυρη διεύθυνση IP
PATHΣύστημα αρχείων ή διαδρομή Ιστού
STRINGΓενική συμβολοσειρά (προεπιλογή)
USERNAMEΜορφή ονόματος χρήστη
WEBURLΙστόςURL
WORDΜόνο γράμματα Α-Ω και κάτω παύλα
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. Να χρησιμοποιείτε πάντα μεθόδους για συγκεκριμένο τύπο - Χρήση getInt() για ταυτότητες, getEmail() για email κ.λπ.

  2. Παρέχετε λογικές προεπιλογές - Μην υποθέτετε ποτέ ότι υπάρχει είσοδος

  3. Επικύρωση μετά την απολύμανση - Η απολύμανση αφαιρεί τα κακά δεδομένα, η επικύρωση διασφαλίζει τα σωστά δεδομένα

  4. Χρησιμοποιήστε κατάλληλο κατακερματισμό - ΠροσδιορίστεPOSTγια δεδομένα φόρμας,GETγια παραμέτρους ερωτήματος

  5. Αποφύγετε την ακατέργαστη εισαγωγή - Χρησιμοποιήστε μόνο getText() ή MASK_ALLOW_RAW όταν είναι απολύτως απαραίτητο

// Good - type-specific with default
$id = Request::getInt('id', 0);
// Bad - using getString for numeric data
$id = (int) Request::getString('id', '0');
  • Ξεκινώντας-με-XMF- ΒασικόXMFέννοιες -XMF-Ενότητα-Βοηθός - Ενότητα βοηθητικής τάξης
  • ../XMF-Πλαίσιο - Επισκόπηση πλαισίου