====== 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 '' . hsc($userInput) . '
';
// SBAGLIATO - Vulnerabilita XSS!
echo '' . $userInput . '
';
// CORRETTO - Escape attributi
echo '' . hsc($text) . '';
// CORRETTO - Contesto JavaScript
echo '';
===== 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) |
----
plugin.info.txt esiste
Header @license in tutti i file PHP
Header @author con email
Nessun accesso diretto $_GET/$_POST
Prevenzione XSS (hsc() usato)
----
//Versione: 2.0 (Split)//\\
//Autore: Wolfgang van der Stille//
Torna a [[.:start|Checklist Stack]] | [[..:start|Checklist di Revisione]]
~~DISCUSSION:off~~