Preverjanje obrazca
Pregled
Section titled “Pregled”XOOPS zagotavlja preverjanje tako na strani odjemalca kot na strani strežnika za vnose obrazcev. Ta priročnik zajema tehnike preverjanja veljavnosti, vgrajene validatorje in izvedbo preverjanja veljavnosti po meri.
Arhitektura preverjanja
Section titled “Arhitektura preverjanja”flowchart TB A[Form Submission] --> B{Client-Side Validation} B -->|Pass| C[Server Request] B -->|Fail| D[Show Client Errors] C --> E{Server-Side Validation} E -->|Pass| F[Process Data] E -->|Fail| G[Return Errors] G --> H[Display Server Errors]Preverjanje na strani strežnika
Section titled “Preverjanje na strani strežnika”Uporaba XoopsFormValidator
Section titled “Uporaba XoopsFormValidator”use Xoops\Core\Form\Validator;
$validator = new Validator();
$validator->addRule('username', 'required', 'Username is required');$validator->addRule('username', 'minLength:3', 'Username must be at least 3 characters');$validator->addRule('username', 'maxLength:50', 'Username cannot exceed 50 characters');$validator->addRule('email', 'email', 'Please enter a valid email address');$validator->addRule('password', 'minLength:8', 'Password must be at least 8 characters');
if (!$validator->validate($_POST)) { $errors = $validator->getErrors(); // Handle errors}Vgrajena pravila preverjanja
Section titled “Vgrajena pravila preverjanja”| Pravilo | Opis | Primer |
|---|---|---|
required | Polje ne sme biti prazno | required |
email | Veljavna oblika elektronske pošte | email |
url | Veljavna oblika URL | url |
numeric | Samo številska vrednost | numeric |
integer | Samo cela vrednost | integer |
minLength | Najmanjša dolžina niza | minLength:3 |
maxLength | Največja dolžina niza | maxLength:100 |
min | Najmanjša številčna vrednost | min:1 |
max | Največja številčna vrednost | max:100 |
regex | Vzorec regularnega izraza po meri | regex:/^[a-z]+$/ |
in | Vrednost na seznamu | in:draft,published,archived |
date | Veljavna oblika datuma | date |
alpha | Samo črke | alpha |
alphanumeric | Črke in številke | alphanumeric |
Pravila preverjanja po meri
Section titled “Pravila preverjanja po meri”$validator->addCustomRule('unique_username', function($value) { $memberHandler = xoops_getHandler('member'); $criteria = new \CriteriaCompo(); $criteria->add(new \Criteria('uname', $value)); return $memberHandler->getUserCount($criteria) === 0;}, 'Username already exists');
$validator->addRule('username', 'unique_username');Zahtevaj potrditev
Section titled “Zahtevaj potrditev”Sanitarni vnos
Section titled “Sanitarni vnos”use Xoops\Core\Request;
// Get sanitized values$username = Request::getString('username', '', 'POST');$email = Request::getEmail('email', '', 'POST');$age = Request::getInt('age', 0, 'POST');$price = Request::getFloat('price', 0.0, 'POST');$tags = Request::getArray('tags', [], 'POST');
// With validation$username = Request::getString('username', '', 'POST', [ 'minLength' => 3, 'maxLength' => 50]);XSS Preventiva
Section titled “XSS Preventiva”use Xoops\Core\Text\Sanitizer;
$sanitizer = Sanitizer::getInstance();
// Sanitize HTML content$cleanContent = $sanitizer->sanitizeForDisplay($userContent);
// Strip all HTML$plainText = $sanitizer->stripHtml($userContent);
// Allow specific tags$content = $sanitizer->sanitizeForDisplay($userContent, [ 'allowedTags' => '<p><br><strong><em><a>']);Preverjanje na strani odjemalca
Section titled “Preverjanje na strani odjemalca”HTML5 Atributi za preverjanje veljavnosti
Section titled “HTML5 Atributi za preverjanje veljavnosti”// Required field$element->setExtra('required');
// Pattern validation$element->setExtra('pattern="[a-zA-Z0-9]+" title="Alphanumeric only"');
// Length constraints$element->setExtra('minlength="3" maxlength="50"');
// Numeric constraints$element->setExtra('min="1" max="100"');Preverjanje JavaScripta
Section titled “Preverjanje JavaScripta”document.getElementById('myForm').addEventListener('submit', function(e) { const username = document.getElementById('username').value; const errors = [];
if (username.length < 3) { errors.push('Username must be at least 3 characters'); }
if (!/^[a-zA-Z0-9_]+$/.test(username)) { errors.push('Username can only contain letters, numbers, and underscores'); }
if (errors.length > 0) { e.preventDefault(); displayErrors(errors); }});CSRF Zaščita
Section titled “CSRF Zaščita”Generiranje žetonov
Section titled “Generiranje žetonov”// Generate token in form$form->addElement(new \XoopsFormHiddenToken());
// This adds a hidden field with security tokenPreverjanje žetona
Section titled “Preverjanje žetona”use Xoops\Core\Security;
if (!Security::checkReferer()) { die('Invalid request origin');}
if (!Security::checkToken()) { die('Invalid security token');}Preverjanje nalaganja datoteke
Section titled “Preverjanje nalaganja datoteke”use Xoops\Core\Uploader;
$uploader = new Uploader( uploadDir: XOOPS_UPLOAD_PATH . '/images/', allowedMimeTypes: ['image/jpeg', 'image/png', 'image/gif'], maxFileSize: 2 * 1024 * 1024, // 2MB maxWidth: 1920, maxHeight: 1080);
if ($uploader->fetchMedia('image_upload')) { if ($uploader->upload()) { $savedFile = $uploader->getSavedFileName(); } else { $errors[] = $uploader->getErrors(); }}Prikaz napak
Section titled “Prikaz napak”Zbiranje napak
Section titled “Zbiranje napak”$errors = [];
if (empty($username)) { $errors['username'] = 'Username is required';}
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { $errors['email'] = 'Invalid email format';}
if (!empty($errors)) { // Store in session for display after redirect $_SESSION['form_errors'] = $errors; $_SESSION['form_data'] = $_POST; header('Location: ' . $_SERVER['HTTP_REFERER']); exit;}Prikaz napak
Section titled “Prikaz napak”{if $errors}<div class="alert alert-danger"> <ul> {foreach $errors as $field => $message} <li>{$message}</li> {/foreach} </ul></div>{/if}Najboljše prakse
Section titled “Najboljše prakse”- Vedno preverjaj na strani strežnika - Preverjanje na strani odjemalca je mogoče zaobiti
- Uporabite parametrizirane poizvedbe - preprečite vbrizgavanje SQL
- Sanitize output - Preprečite napade XSS
- Potrdi nalaganje datotek - Preverite vrste in velikosti MIME
- Uporabite žetone CSRF - preprečite ponarejanje zahtev med spletnimi mesti
- Pošiljanje omejitev hitrosti - Preprečite zlorabo
Povezana dokumentacija
Section titled “Povezana dokumentacija”- Referenca elementov obrazca
- Pregled obrazcev
- Najboljše varnostne prakse