XMF Permintaan
Kelas XMF\Request menyediakan akses terkawal kepada pembolehubah permintaan HTTP dengan sanitasi terbina dalam dan penukaran jenis. Ia melindungi daripada suntikan yang berpotensi berbahaya secara lalai sambil mematuhi input kepada jenis tertentu.
Gambaran Keseluruhan
Section titled “Gambaran Keseluruhan”Pengendalian permintaan ialah salah satu aspek pembangunan web yang paling kritikal keselamatan. Kelas XMF Permintaan:
- Membersihkan input secara automatik untuk mengelakkan serangan XSS
- Menyediakan pengakses jenis selamat untuk jenis data biasa
- Menyokong berbilang sumber permintaan (GET, POST, COOKIE, dsb.)
- Menawarkan pengendalian nilai lalai yang konsisten
Penggunaan Asas
Section titled “Penggunaan Asas”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');Kaedah Permintaan
Section titled “Kaedah Permintaan”getMethod()
Section titled “getMethod()”Mengembalikan kaedah permintaan HTTP untuk permintaan semasa.
$method = Request::getMethod();// Returns: 'GET', 'HEAD', 'POST', or 'PUT'getVar($name, $default, $hash, $type, $mask)
Section titled “getVar($name, $default, $hash, $type, $mask)”Kaedah teras yang digunakan oleh kebanyakan kaedah get*() yang lain. Mengambil dan mengembalikan pembolehubah bernama daripada data permintaan.
Parameter:
$name- Nama boleh ubah untuk diambil$default- Nilai lalai jika pembolehubah tidak wujud$hash- Hash sumber: GET, POST, FILES, COOKIE, ENV, SERVER, 000,020 (default)$type- Jenis data untuk pembersihan (lihat jenis Input Penapis di bawah)$mask- Bitmask untuk pilihan pembersihan
Nilai Topeng:
| Pemalar Topeng | Kesan |
|---|---|
MASK_NO_TRIM | Jangan potong leading/trailing ruang putih |
MASK_ALLOW_RAW | Langkau pembersihan, benarkan input mentah |
MASK_ALLOW_HTML | Benarkan set “selamat” terhad bagi HTML markup |
// 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);Kaedah Khusus Jenis
Section titled “Kaedah Khusus Jenis”getInt($name, $default, $hash)
Section titled “getInt($name, $default, $hash)”Mengembalikan nilai integer. Hanya digit dibenarkan.
$id = Request::getInt('id', 0);$page = Request::getInt('page', 1, 'GET');getFloat($name, $default, $hash)
Section titled “getFloat($name, $default, $hash)”Mengembalikan nilai apungan. Hanya digit dan noktah dibenarkan.
$price = Request::getFloat('price', 0.0);$rate = Request::getFloat('rate', 1.0, 'POST');getBool($name, $default, $hash)
Section titled “getBool($name, $default, $hash)”Mengembalikan nilai boolean.
$enabled = Request::getBool('enabled', false);$subscribe = Request::getBool('subscribe', false, 'POST');getWord($name, $default, $hash)
Section titled “getWord($name, $default, $hash)”Mengembalikan rentetan dengan hanya huruf dan garis bawah [A-Za-z_].
$action = Request::getWord('action', 'view');getCmd($name, $default, $hash)
Section titled “getCmd($name, $default, $hash)”Mengembalikan rentetan arahan dengan hanya [A-Za-z0-9.-_], terpaksa menggunakan huruf kecil.
$op = Request::getCmd('op', 'list');// Input "View_Item" becomes "view_item"getString($name, $default, $hash, $mask)
Section titled “getString($name, $default, $hash, $mask)”Mengembalikan rentetan yang telah dibersihkan dengan kod HTML buruk dialih keluar (melainkan ditindih oleh topeng).
$title = Request::getString('title', '');$description = Request::getString('description', '', 'POST');
// Allow some HTML$content = Request::getString('content', '', 'POST', Request::MASK_ALLOW_HTML);getArray($name, $default, $hash)
Section titled “getArray($name, $default, $hash)”Mengembalikan tatasusunan, diproses secara rekursif untuk mengalih keluar XSS dan kod buruk.
$items = Request::getArray('items', [], 'POST');$selectedIds = Request::getArray('selected', []);getText($name, $default, $hash)
Section titled “getText($name, $default, $hash)”Mengembalikan teks mentah tanpa pembersihan. Gunakan dengan berhati-hati.
$rawContent = Request::getText('raw_content', '');getUrl($name, $default, $hash)
Section titled “getUrl($name, $default, $hash)”Mengembalikan web yang disahkan URL (skim relatif, http atau https sahaja).
$website = Request::getUrl('website', '');$returnUrl = Request::getUrl('return', 'index.php');getPath($name, $default, $hash)
Section titled “getPath($name, $default, $hash)”Mengembalikan sistem fail atau laluan web yang disahkan.
$filePath = Request::getPath('file', '');getEmail($name, $default, $hash)
Section titled “getEmail($name, $default, $hash)”Mengembalikan alamat e-mel yang disahkan atau lalai.
$email = Request::getEmail('email', '');$contactEmail = Request::getEmail('contact', 'default@example.com');getIP($name, $default, $hash)
Section titled “getIP($name, $default, $hash)”Mengembalikan alamat IPv4 atau IPv6 yang disahkan.
$userIp = Request::getIP('client_ip', '');getHeader($headerName, $default)
Section titled “getHeader($headerName, $default)”Mengembalikan nilai pengepala permintaan HTTP.
$contentType = Request::getHeader('Content-Type', '');$userAgent = Request::getHeader('User-Agent', '');$authHeader = Request::getHeader('Authorization', '');Kaedah Utiliti
Section titled “Kaedah Utiliti”hasVar($name, $hash)
Section titled “hasVar($name, $hash)”Semak sama ada pembolehubah wujud dalam cincang yang ditentukan.
if (Request::hasVar('submit', 'POST')) { // Form was submitted}
if (Request::hasVar('id', 'GET')) { // ID parameter exists}setVar($name, $value, $hash, $overwrite)
Section titled “setVar($name, $value, $hash, $overwrite)”Tetapkan pembolehubah dalam cincang yang ditentukan. Mengembalikan nilai sebelumnya atau null.
// Set a value$oldValue = Request::setVar('processed', true, 'POST');
// Only set if not already existsRequest::setVar('default_op', 'list', 'GET', false);dapatkan($hash, $mask)
Section titled “dapatkan($hash, $mask)”Mengembalikan salinan keseluruhan tatasusunan cincang yang telah dibersihkan.
// 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);set($array, $hash, $overwrite)
Section titled “set($array, $hash, $overwrite)”Menetapkan berbilang pembolehubah daripada tatasusunan.
$defaults = [ 'page' => 1, 'limit' => 10, 'sort' => 'date'];Request::set($defaults, 'GET', false); // Don't overwrite existingPenyepaduan Input Penapis
Section titled “Penyepaduan Input Penapis”Kelas Permintaan menggunakan XMF\FilterInput untuk pembersihan. Jenis penapis yang tersedia:
| Taip | Penerangan |
|---|---|
| ALPHANUM / ALNUM | Alfanumerik sahaja |
| ARRAY | Bersihkan secara rekursif setiap elemen |
| BASE64 | Rentetan berkod Base64 |
| BOOLEAN / BOOL | Betul atau salah |
| CMD | Perintah - A-Z, 0-9, garis bawah, sempang, noktah (huruf kecil) |
| Alamat e-mel yang sah | |
| FLOAT / DOUBLE | Nombor titik terapung |
| INTEGER / INT | Nilai integer |
| IP | Alamat IP yang sah |
| PATH | Sistem fail atau laluan web |
| STRING | Rentetan am (lalai) |
| USERNAME | Format nama pengguna |
| WEBURL | Web URL |
| WORD | Huruf A-Z dan garis bawah sahaja |
Contoh Praktikal
Section titled “Contoh Praktikal”Pemprosesan Borang
Section titled “Pemprosesan Borang”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'; }}AJAX Pengendali
Section titled “AJAX Pengendali”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; }}Penomboran
Section titled “Penomboran”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;Borang Carian
Section titled “Borang Carian”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));}Amalan Terbaik Keselamatan
Section titled “Amalan Terbaik Keselamatan”-
Sentiasa gunakan kaedah khusus jenis - Gunakan
getInt()untuk ID,getEmail()untuk e-mel, dsb. -
Berikan lalai yang wajar - Jangan sekali-kali menganggap input wujud
-
Sahkan selepas sanitasi - Sanitasi membuang data yang tidak baik, pengesahan memastikan data yang betul
-
Gunakan cincang yang sesuai - Tentukan POST untuk data borang, GET untuk parameter pertanyaan
-
Elakkan input mentah - Hanya gunakan
getText()atauMASK_ALLOW_RAWapabila benar-benar perlu
// Good - type-specific with default$id = Request::getInt('id', 0);
// Bad - using getString for numeric data$id = (int) Request::getString('id', '0');Lihat Juga
Section titled “Lihat Juga”- Bermula-dengan-XMF - Konsep asas XMF
- XMF-Modul-Helper - Kelas pembantu modul
- ../XMF-Rangka Kerja - Gambaran keseluruhan rangka kerja
#XMF #request #security #input-validation #sanitization