XMF בַּקָשָׁה
ה Xmf\Request class מספקת גישה מבוקרת ל HTTP בקש משתנים עם חיטוי מובנה והמרת סוג. הוא מגן מפני הזרקות שעלולות להיות מזיקות כברירת מחדל תוך התאמה של קלט לסוגים שצוינו.
סקירה כללית
Section titled “סקירה כללית”טיפול בבקשות הוא אחד ההיבטים הקריטיים ביותר לאבטחה בפיתוח אתרים. ה XMF בקשת שיעור:
- מחטא באופן אוטומטי קלט כדי למנוע XSS התקפות
- מספק אביזרים בטוחים לסוגי נתונים נפוצים
- תומך במספר מקורות בקשות (GET, POST, COOKIEוכו’)
- מציע טיפול עקבי בערך ברירת מחדל
שימוש בסיסי
Section titled “שימוש בסיסי”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');שיטות בקשה
Section titled “שיטות בקשה”getMethod()
Section titled “getMethod()”מחזיר את HTTP שיטת בקשה עבור הבקשה הנוכחית.
$method = Request::getMethod();// Returns: 'GET', 'HEAD', 'POST', or 'PUT'getVar($name, $default, $hash, $type, $mask)
Section titled “getVar($name, $default, $hash, $type, $mask)”שיטת הליבה כי רוב אחרים get*() שיטות להפעיל. שואב ומחזיר משתנה בעל שם מנתוני בקשה.
פרמטרים:
$name- שם משתנה לשליפה$default- ערך ברירת מחדל אם המשתנה אינו קיים$hash- Hash מקור: GET, POST, FILES, COOKIE, ENV, SERVER, METHOD, או REQUEST (ברירת מחדל)$type- סוג נתונים לניקוי (ראה סוגי קלט מסנן להלן)$mask- מסכת סיביות לאפשרויות ניקוי
ערכי מסכה:
| מסכה קבועה | אפקט |
|---|---|
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);שיטות ספציפיות לסוג
Section titled “שיטות ספציפיות לסוג”getInt($name, $default, $hash)
Section titled “getInt($name, $default, $hash)”מחזירה ערך של מספר שלם. רק ספרות מותרות.
$id = Request::getInt('id', 0);$page = Request::getInt('page', 1, 'GET');getFloat($name, $default, $hash)
Section titled “getFloat($name, $default, $hash)”מחזירה ערך צף. רק ספרות ונקודות מותרות.
$price = Request::getFloat('price', 0.0);$rate = Request::getFloat('rate', 1.0, 'POST');getBool($name, $default, $hash)
Section titled “getBool($name, $default, $hash)”מחזירה ערך בוליאני.
$enabled = Request::getBool('enabled', false);$subscribe = Request::getBool('subscribe', false, 'POST');getWord($name, $default, $hash)
Section titled “getWord($name, $default, $hash)”מחזירה מחרוזת עם אותיות וקווים תחתונים בלבד [A-Za-z_].
$action = Request::getWord('action', 'view');getCmd($name, $default, $hash)
Section titled “getCmd($name, $default, $hash)”מחזירה מחרוזת פקודה עם בלבד [A-Za-z0-9.-_], נאלץ לאותיות קטנות.
$op = Request::getCmd('op', 'list');// Input "View_Item" becomes "view_item"getString($name, $default, $hash, $mask)
Section titled “getString($name, $default, $hash, $mask)”מחזיר מחרוזת נקייה עם רע HTML הקוד הוסר (אלא אם כן נשלף על ידי מסכה).
$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)”מחזיר מערך, מעובד באופן רקורסיבי להסרה XSS וקוד גרוע.
$items = Request::getArray('items', [], 'POST');$selectedIds = Request::getArray('selected', []);getText($name, $default, $hash)
Section titled “getText($name, $default, $hash)”מחזיר טקסט גולמי ללא ניקוי. השתמש בזהירות.
$rawContent = Request::getText('raw_content', '');getUrl($name, $default, $hash)
Section titled “getUrl($name, $default, $hash)”מחזירה אינטרנט מאומת URL (סכימות יחסיות, http או https בלבד).
$website = Request::getUrl('website', '');$returnUrl = Request::getUrl('return', 'index.php');getPath($name, $default, $hash)
Section titled “getPath($name, $default, $hash)”מחזירה מערכת קבצים מאומתת או נתיב אינטרנט.
$filePath = Request::getPath('file', '');getEmail($name, $default, $hash)
Section titled “getEmail($name, $default, $hash)”מחזירה כתובת אימייל מאומתת או ברירת המחדל.
$email = Request::getEmail('email', '');$contactEmail = Request::getEmail('contact', 'default@example.com');getIP($name, $default, $hash)
Section titled “getIP($name, $default, $hash)”מחזירה כתובת IPv4 או IPv6 מאומתת.
$userIp = Request::getIP('client_ip', '');getHeader($headerName, $default)
Section titled “getHeader($headerName, $default)”מחזירה an HTTP ערך כותרת בקשה.
$contentType = Request::getHeader('Content-Type', '');$userAgent = Request::getHeader('User-Agent', '');$authHeader = Request::getHeader('Authorization', '');שיטות שירות
Section titled “שיטות שירות”hasVar($name, $hash)
Section titled “hasVar($name, $hash)”בדוק אם קיים משתנה ב-hash שצוין.
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)”הגדר משתנה ב-hash שצוין. מחזירה את הערך הקודם או null.
// Set a value$oldValue = Request::setVar('processed', true, 'POST');
// Only set if not already existsRequest::setVar('default_op', 'list', 'GET', false);קבל($hash, $mask)
Section titled “קבל($hash, $mask)”מחזירה עותק נקי של מערך 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);set($array, $hash, $overwrite)
Section titled “set($array, $hash, $overwrite)”מגדיר משתנים מרובים ממערך.
$defaults = [ 'page' => 1, 'limit' => 10, 'sort' => 'date'];Request::set($defaults, 'GET', false); // Don't overwrite existingשילוב FilterInput
Section titled “שילוב FilterInput”מחלקת Request משתמשת Xmf\FilterInput לניקוי. סוגי מסננים זמינים:
| הקלד | תיאור |
|---|---|
| ALPHANUM / ALNUM | אלפאנומרי בלבד |
| ARRAY | נקה באופן רקורסיבי כל אלמנט |
| BASE64 | מחרוזת מקודדת Base64 |
| BOOLEAN / BOOL | נכון או לא נכון |
| CMD | פקודה - א-ז, 0-9, קו תחתון, מקף, נקודה (אותיות קטנות) |
| כתובת אימייל חוקית | |
| FLOAT / DOUBLE | מספר נקודה צפה |
| INTEGER / INT | ערך מספר שלם |
| IP | כתובת IP חוקית |
| PATH | מערכת קבצים או נתיב אינטרנט |
| STRING | מחרוזת כללית (ברירת מחדל) |
| USERNAME | פורמט שם משתמש |
| WEBURL | אינטרנט URL |
| WORD | אותיות A-Z וקו תחתון בלבד |
דוגמאות מעשיות
Section titled “דוגמאות מעשיות”עיבוד טופס
Section titled “עיבוד טופס”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 מטפל
Section titled “AJAX מטפל”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;טופס חיפוש
Section titled “טופס חיפוש”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));}שיטות עבודה מומלצות לאבטחה
Section titled “שיטות עבודה מומלצות לאבטחה”-
השתמש תמיד בשיטות ספציפיות לסוג - השתמש
getInt()עבור תעודות זהות,getEmail()למיילים וכו’. -
ספק ברירות מחדל הגיוניות - לעולם אל תניח שקיים קלט
-
אמת לאחר חיטוי - חיטוי מסיר נתונים גרועים, אימות מבטיח נתונים נכונים
-
השתמש ב-hash מתאים - ציין POST עבור נתוני טופס, GET עבור פרמטרי שאילתה
-
הימנע מקלט גולמי - השתמש רק
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');ראה גם
Section titled “ראה גם”- תחילת העבודה עם-XMF - בסיסי XMF מושגים
- XMF-Module-Helper - שיעור עוזר מודול
- ../XMF-Framework - סקירת מסגרת
#xmf #request #security #input-validation #sanitization