Checklist DokuWiki/PHP Security

Versione: 2.0
Ambito: Sviluppo plugin DokuWiki e hardening sicurezza specifico PHP.

Questa sezione estende la Common Checklist per lo sviluppo plugin DokuWiki.

Sicurezza Specifica PHP

Verifica CWE Descrizione Soluzione
[ ] Prevenzione XSS CWE-79 Input utente in output HTML hsc(), htmlspecialchars()
[ ] SQL Injection CWE-89 Query database Astrazione DB DokuWiki, Prepared Statements
[ ] Path Traversal CWE-22 Manipolazione percorsi file cleanID(), resolve_id()
[ ] Protezione CSRF CWE-352 Invio form getSecurityToken(), checkSecurityToken()
[ ] Command Injection CWE-78 Comandi shell Evitare exec(), shell_exec(), system()
[ ] Upload File CWE-434 Upload file malevoli Validazione MIME, whitelist estensioni
[ ] Open Redirect CWE-601 Redirect URL Whitelist domini consentiti
[ ] Session Fixation CWE-384 Gestione sessioni Gestione sessioni DokuWiki

Gestione Input DokuWiki

Funzione Scopo Quando Usare
hsc($str) Escape HTML Tutto l'input utente in HTML
$INPUT→str('param') Stringa GET/POST sicura Parametri form
$INPUT→int('param') Input intero sicuro Parametri numerici
$INPUT→arr('param') Input array sicuro Parametri array
cleanID($id) Sanifica Page ID Riferimenti pagine wiki
resolve_id($ns, $id) Risolvi ID relativo Risoluzione namespace

Codifica Output DokuWiki

// CORRETTO - Sempre escape input utente
echo '<div>' . hsc($userInput) . '</div>';
 
// SBAGLIATO - Vulnerabilita XSS!
echo '<div>' . $userInput . '</div>';
 
// CORRETTO - Escape attributi
echo '<a href="' . hsc($url) . '">' . hsc($text) . '</a>';
 
// CORRETTO - Contesto JavaScript
echo '<script>var data = ' . json_encode($data, JSON_HEX_TAG) . ';</script>';

Struttura Plugin DokuWiki

Verifica Descrizione
[ ] plugin.info.txt esiste Metadati plugin
[ ] Header @license in tutti i file PHP GPL 2 o compatibile
[ ] Header @author con email Attribuzione
[ ] Usa $this→getLang() Localizzazione
[ ] Usa DokuWiki Events Estensibilita
[ ] Nessun accesso diretto $_GET/$_POST Usa oggetto $INPUT
[ ] Nessuna scrittura file diretta Usa API DokuWiki

Checklist Audit Sicurezza DokuWiki

Verifica CWE Pattern Codice PHP da Cercare
[ ] XSS in echo CWE-79 echo $var senza hsc()
[ ] XSS in print CWE-79 print $var senza hsc()
[ ] $_GET diretto CWE-20 $_GET['param']
[ ] $_POST diretto CWE-20 $_POST['param']
[ ] $_REQUEST diretto CWE-20 $_REQUEST['param']
[ ] Concat SQL CWE-89 „SELECT * FROM “ . $var
[ ] Shell exec CWE-78 exec(), shell_exec(), system(), backtick
[ ] File include CWE-98 include($var), require($var)
[ ] Redirect non validato CWE-601 header(„Location: “ . $var)
[ ] Eval CWE-94 eval($var)
[ ] Preg con modificatore e CWE-94 preg_replace('/…$/e', …) (deprecato)

Riferimento Funzioni Sicurezza DokuWiki

Funzione Scopo CWE Prevenuto
hsc() HTML Special Chars CWE-79 (XSS)
cleanID() Pulisci Page ID CWE-22 (Path Traversal)
resolve_id() Risolvi Page ID CWE-22 (Path Traversal)
getSecurityToken() Ottieni Token CSRF CWE-352 (CSRF)
checkSecurityToken() Verifica Token CSRF CWE-352 (CSRF)
auth_quickaclcheck() Verifica permessi CWE-862 (Missing Auth)
$INPUT→str() Input stringa sicuro CWE-20 (Input Validation)
$INPUT→int() Input intero sicuro CWE-20 (Input Validation)

<wvds:audit:template> plugin.info.txt esiste Header @license in tutti i file PHP Header @author con email Nessun accesso diretto $_GET/$_POST Prevenzione XSS (hsc() usato) </wvds:audit:template>


Versione: 2.0 (Split)
Autore: Wolfgang van der Stille

Torna a Checklist Stack | Checklist di Revisione

Zuletzt geändert: il 29/01/2026 alle 21:09