Inhaltsverzeichnis
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