İçeriğe geç

XMF Talep

Xmf\Request sınıfı, yerleşik temizleme ve tür dönüştürme özellikleriyle HTTP istek değişkenlerine kontrollü erişim sağlar. Girdiyi belirtilen türlere uygun hale getirirken varsayılan olarak zararlı olabilecek enjeksiyonlara karşı koruma sağlar.

İstek işleme, web geliştirmenin güvenlik açısından en kritik yönlerinden biridir. XMF İstek sınıfı:

  • XSS saldırılarını önlemek için girişi otomatik olarak temizler
  • Yaygın veri türleri için tür açısından güvenli erişimciler sağlar
  • Birden fazla istek kaynağını destekler (GET, POST, COOKIE, vb.)
  • Tutarlı varsayılan değer işleme sunar
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');

Geçerli istek için HTTP istek yöntemini döndürür.

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

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

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

Diğer get*() yöntemlerinin çoğunun çağırdığı temel yöntem. İstek verilerinden adlandırılmış bir değişkeni getirir ve döndürür.

Parametreler:

  • $name - Getirilecek değişken adı
  • $default - Değişken yoksa varsayılan değer
  • $hash - Kaynak karması: GET, POST, FILES, COOKIE, ENV, SERVER, METHOD veya REQUEST (varsayılan)
  • $type - Temizleme için veri türü (aşağıdaki FilterInput türlerine bakın)
  • $mask - Temizleme seçenekleri için bit maskesi

Maske Değerleri:

Maske SabitiEfekt
MASK_NO_TRIMleading/trailing boşlukları kesmeyin
MASK_ALLOW_RAWTemizlemeyi atlayın, ham girişe izin verin
MASK_ALLOW_HTMLSınırlı “güvenli” bir HTML işaretleme kümesine izin ver
// 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);

Bir tamsayı değeri döndürür. Yalnızca rakamlara izin verilir.

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

Bir kayan nokta değeri döndürür. Yalnızca rakamlara ve noktalara izin verilir.

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

Bir boole değeri döndürür.

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

Yalnızca harf ve alt çizgi içeren bir dize döndürür [A-Za-z_].

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

Yalnızca [A-Za-z0-9.-_]’nin küçük harfe zorlandığı bir komut dizesi döndürür.

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

Bozuk HTML kodunun kaldırıldığı, temizlenmiş bir dize döndürür (maske tarafından geçersiz kılınmadığı sürece).

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

XSS ve hatalı kodu kaldırmak için yinelemeli olarak işlenen bir diziyi döndürür.

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

Temizlemeden ham metni döndürür. Dikkatli kullanın.

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

Doğrulanmış bir web URL döndürür (yalnızca göreceli, http veya https şemaları).

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

Doğrulanmış bir dosya sistemi veya web yolu döndürür.

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

Doğrulanmış bir e-posta adresini veya varsayılanı döndürür.

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

Doğrulanmış bir IPv4 veya IPv6 adresi döndürür.

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

Bir HTTP istek başlığı değerini döndürür.

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

Belirtilen karmada bir değişkenin mevcut olup olmadığını kontrol edin.

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

Belirtilen karmada bir değişken ayarlayın. Önceki değeri veya null değerini döndürür.

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

Karma dizisinin tamamının temizlenmiş bir kopyasını döndürür.

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

Bir diziden birden fazla değişken ayarlar.

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

İstek sınıfı temizlik için Xmf\FilterInput kullanır. Mevcut filtre türleri:

TürAçıklama
ALPHANUM / ALNUMYalnızca alfanümerik
ARRAYHer öğeyi yinelemeli olarak temizleyin
BASE64Base64 kodlu dize
BOOLEAN / BOOLDoğru veya yanlış
CMDKomut - A-Z, 0-9, alt çizgi, tire, nokta (küçük harf)
EMAILGeçerli e-posta adresi
FLOAT / DOUBLEKayan nokta sayısı
INTEGER / INTTam sayı değeri
IPGeçerli IP adresi
PATHDosya sistemi veya web yolu
STRINGGenel dize (varsayılan)
USERNAMEuser adı formatı
WEBURLWeb URL
WORDA’dan Z’ye harfler ve yalnızca alt çizgi
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. Her zaman türe özel yöntemler kullanın - Kimlikler için getInt(), e-postalar vb. için getEmail() kullanın.

  2. Mantıklı varsayılanlar sağlayın - Hiçbir zaman girdinin var olduğunu varsaymayın

  3. Temizlemeden sonra doğrulayın - Temizleme, kötü verileri kaldırır, doğrulama, doğru veriyi sağlar

  4. Uygun karma değerini kullanın - Form verileri için POST, sorgu parametreleri için GET belirtin

  5. Ham girişten kaçının - Yalnızca kesinlikle gerekli olduğunda getText() veya MASK_ALLOW_RAW kullanın

// Good - type-specific with default
$id = Request::getInt('id', 0);
// Bad - using getString for numeric data
$id = (int) Request::getString('id', '0');
  • XMF ile Başlarken - Temel XMF kavramları
  • XMF-Module-Helper - module yardımcı sınıfı
  • ../XMF-Framework - Çerçeveye genel bakış

#xmf #istek #güvenlik #giriş doğrulama #temizleştirme