Lewati ke konten

Permintaan XMF

Kelas Xmf\Request menyediakan akses terkontrol ke variabel permintaan HTTP dengan sanitasi bawaan dan konversi tipe. Ini melindungi terhadap suntikan yang berpotensi membahayakan secara default sambil menyesuaikan input ke jenis tertentu.

Penanganan permintaan adalah salah satu aspek keamanan yang paling penting dalam pengembangan web. Kelas Permintaan XMF:

  • Secara otomatis membersihkan input untuk mencegah serangan XSS
  • Menyediakan pengakses tipe-aman untuk tipe data umum
  • Mendukung berbagai sumber permintaan (GET, POST, COOKIE, dll.)
  • Menawarkan penanganan nilai default yang konsisten
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');

Mengembalikan metode permintaan HTTP untuk permintaan saat ini.

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

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

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

Metode core yang digunakan sebagian besar metode get*() lainnya. Mengambil dan mengembalikan variabel bernama dari data permintaan.

Parameter:

  • $name - Nama variabel yang akan diambil
  • $default - Nilai default jika variabel tidak ada
  • $hash - Sumber hash: GET, POST, FILES, COOKIE, ENV, SERVER, METHOD, atau REQUEST (default)
  • $type - Tipe data untuk pembersihan (lihat tipe FilterInput di bawah)
  • $mask - Bitmask untuk opsi pembersihan

Nilai Masker:

Topeng KonstanEfek
MASK_NO_TRIMJangan pangkas spasi leading/trailing
MASK_ALLOW_RAWLewati pembersihan, izinkan masukan mentah
MASK_ALLOW_HTMLIzinkan kumpulan markup HTML “aman” yang terbatas
// 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);

Mengembalikan nilai integer. Hanya angka yang diperbolehkan.

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

Mengembalikan nilai float. Hanya angka dan titik yang diperbolehkan.

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

Mengembalikan nilai boolean.

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

Mengembalikan string yang hanya berisi huruf dan garis bawah [A-Za-z_].

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

Mengembalikan string perintah dengan hanya [A-Za-z0-9.-_], yang dipaksa menjadi huruf kecil.

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

Mengembalikan string yang telah dibersihkan dengan kode HTML yang buruk telah dihapus (kecuali diganti dengan mask).

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

Mengembalikan array, diproses secara rekursif untuk menghapus XSS dan kode buruk.

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

Mengembalikan teks mentah tanpa dibersihkan. Gunakan dengan hati-hati.

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

Mengembalikan web URL yang divalidasi (hanya skema relatif, http, atau https).

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

Mengembalikan sistem file atau jalur web yang divalidasi.

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

Mengembalikan alamat email yang divalidasi atau default.

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

Mengembalikan alamat IPv4 atau IPv6 yang divalidasi.

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

Mengembalikan nilai header permintaan HTTP.

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

Periksa apakah ada variabel dalam hash yang ditentukan.

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

Tetapkan variabel dalam hash yang ditentukan. Mengembalikan nilai sebelumnya atau null.

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

Mengembalikan salinan bersih dari seluruh array hash.

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

Menetapkan beberapa variabel dari array.

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

Kelas Permintaan menggunakan Xmf\FilterInput untuk pembersihan. Jenis filter yang tersedia:

KetikDeskripsi
ALPHANUM/ALNUMHanya alfanumerik
ARRAYBersihkan setiap elemen
BASE64String yang dikodekan Base64
BOOLEAN / BOOLBenar atau salah
cmdPerintah - A-Z, 0-9, garis bawah, tanda hubung, titik (huruf kecil)
EMAILAlamat email yang valid
MENGAPUNG / GANDANomor titik mengambang
BULAT / INTNilai bilangan bulat
IPAlamat IP yang valid
JALURSistem file atau jalur web
STRINGString umum (default)
NAMA PENGGUNAFormat nama pengguna
URL WEBWeb URL
KATAHuruf A-Z dan garis bawah saja
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. Selalu gunakan metode khusus jenis - Gunakan getInt() untuk ID, getEmail() untuk email, dll.

  2. Berikan default yang masuk akal - Jangan pernah berasumsi ada masukan

  3. Validasi setelah sanitasi - Sanitasi menghilangkan data buruk, validasi memastikan data benar

  4. Gunakan hash yang sesuai - Tentukan POST untuk data formulir, GET untuk parameter kueri

  5. Hindari input mentah - Hanya gunakan getText() atau MASK_ALLOW_RAW bila benar-benar diperlukan

// Good - type-specific with default
$id = Request::getInt('id', 0);
// Bad - using getString for numeric data
$id = (int) Request::getString('id', '0');
  • Memulai-dengan-XMF - Konsep dasar XMF
  • XMF-Module-Helper - Kelas pembantu module
  • ../XMF-Framework - Ikhtisar kerangka kerja

#xmf #permintaan #keamanan #validasi masukan #sanitisasi