Logged as: guest |
|
Questa sentinella si occupa di bloccare alcuni attacchi usati per mettere in pericolo la sicurezza di un sito web e/o degli utenti dello stesso. Le funzioni principali di noSentinel si occupano di:
Queste sono le funzioni principali a disposizione del programmatore. Ci sono alcune funzioni "interne" alla classe, che vengono eseguite in automatico al momento in cui viene creato un nuovo oggetto. Queste funzioni sono:
## installazione ## Premettendo che in questa versione (la 0.0.1) non è disponibile lo script di installazione automatica, dovete fare questi piccoli e semplici passaggi che nella prossima versione verranno automatizzati. Il primo passaggio è aprire il file della sentinella con un editor di testo e dare un occhiata alle prime righe: il file: /path/dove_si_trova/noSentinel/sentinel.php Diamo un occhiata al seguente codice: #### you MUST modify this email, whit your! #### protected $ADMIN_noSentinel = "your@address.here"; #### if you want you can modify this file name (that are the databases)#### ### do NOT remove the slashes before file names! ### protected $XSS_noSentinel = "/xss.txt"; protected $COUNT_noSentinel = "/count.txt"; protected $NUMERIC_noSentinel = "/numeric.txt"; protected $AGENT_noSentinel = "/agent.txt"; protected $BAN_noSentinel = "/ban.txt"; protected $SQL_noSentinel = "/sql.txt"; Modificato il seguente file, non vi resta che creare nella directory di noSentinel i file VUOTI che avete definito prima, in questo caso i file:
Ultima cosa, creare il file .htaccess con il seguente contenuto (ovviamente sempre nella stessa directory della sentinella): <Files ~ ".+"> Order allow,deny Deny from all Satisfy All </Files> Per attivare la protezione basta includere in ogni pagina che vorrete monitorata il seguente codice: include_once(dirname(__FILE__)."/path/dove_si_trova/noSentinel/sentinel.php"); ## utilizzo ## Creiamo un nuovo oggetto:
Notice: Undefined variable: COOKIE in /web-sites/nessuno/noSentinel/menu.php on line 77
Notice: Use of undefined constant CHECK - assumed 'CHECK' in /web-sites/nessuno/sentinel/sentinel.php on line 64
Spieghiamo.$test = new noSentinel(0, $_POST, $_GET, $_COOKIE) Nel primo parametro è stato inserito uno zero (0). Se noi avessimo voluto trasformare in entità html i parametri passati dopo basta sostitiure lo zero con la stringa "entities". In questo modo: $test = new noSentinel(entities, $_POST, $_GET, $_COOKIE) Al posto di inserire tutti i tre i parametri sarebbe stato possibile inserire solamente $_REQUEST e lasciare inalterati gli altri. Ora che abbiamo creato l'oggetto da utilizzare non ci resta che utilizzare le sue funzioni. Già avendo creato l'oggetto abbiamo attivato delle funzioni, che sono: il controllo dell'user agent ed il controllo degli IP bannati. ## funzioni id ## Le funzioni id sono utili quando lavoriamo direttamente con gli array super globali sopra citati. Per esempio se volessimo controllare che una stringa "k" passata tramite il metodo GET non sia un possibile attacco XSS. La nostra variabile ha il seguente aspetto $_GET['k']. Useremo la funzione xss_id_check, in questo modo: if($test->xss_id_check('k')) echo "Nessun tentativo di attacco XSS rilevato"; else echo "I Tuoi dati sono stati salvati :\ Attacco di tipo XSS rilevato"; La funzione xss_id_check ha un secondo parametro OPZIONALE. Il parametro per l'aggiunta al contatore degli attacchi da un determinato IP. Questo parametro è: BAN Basterà modificare la funzione in questo modo: if($test->xss_id_check('k',BAN)) echo "Nessun tentativo di attacco XSS rilevato"; else echo "I Tuoi dati sono stati salvati. Attacco di tipo XSS rilevato"; Ovviamente se per comodità volete solo notificare un caso di intrusione basta modificare l'istruzione if anteponendo l'operatore ! (NOT logico). Un altra funzione id è la funzione sql_id_check. La sua sintassi è identica a quella della funzione appena spiegata. Questa funzione blocca gli attacchi di tipo "SQL Injections". Utilizzando la stessa variabile $_GET['k'] di prima un esempio potrebbe essere: if($test->sql_id_check('k')) echo "Nessun attacco di tipo SQL rilevato"; else echo "I Tuoi dati sono stati salvati. Attacco di tipo SQL INJECTION rilevato"; if(!$test->sql_id_check('k',BAN)) //anteponendo l'operatore NOT echo "I Tuoi dati sono stati salvati. Attacco di tipo SQL INJECTION rilevato"; Questa funzione controlla che la variabile sia di tipo numerico, utile quando per esempio si ha un guestbook che include volta per volta una pagina numerata in progressione, passando la variabile tramite GET. La sintassi è identica alle precedenti. if(!$test->numeric_id_check('k')) //anteponendo l'operatore NOT echo "I Tuoi dati sono stati salvati. Questa variabile non accetta dati di tipo non numerico"; if(!$test->numeric_id_check('k',BAN)) //anteponendo l'operatore NOT echo "I Tuoi dati sono stati salvati. Questa variabile non accetta dati di tipo non numerico"; ## funzioni su variabili assegnate ## Questo tipo di funzione è utile da utilizzare quando si usano le varabili prese dagli array super globali sopra citati a si assegnano a variabili interne. Un esempio è questo caso: $variabile = isset($_GET['k']) ? $_GET['k'] : ''; Le funzioni disponibili fanno esattamente gli stessi controlli delle precedenti, cambia solo il nome.
<?php $variabile1 = isset($_GET['k']) ? $_GET['a'] : ''; $variabile2 = isset($_GET['k']) ? $_GET['b'] : ''; $variabile3 = isset($_GET['k']) ? $_GET['c'] : ''; $test = new noSentinel(0,$_GET); if(!$test->xss_check($variabile1)) echo "Dati salvati, rilevato tentativo di attacco XSS\n"; else echo(htmlentities($variabile1)); if(!$test->sql_check($variabile2,BAN)) die('Attacco di TIPO SQL, chiudo la connessione alla pagina'); else echo(htmlentities($variabile2)); if(!$test->numeric_check($variabile3)) die('Non è stato passato un valore numerico come richiesto'); #questi tre sono esempi molto banali per chiarire in concetto ;-) ?> ## funzioni utili e pubblicitarie ## Sono disponibili le seguenti funzioni:
Queste funzioni sono "funzioni grafiche" in quanto non controllano nulla, ma si limitano a mandare in output il loro contenuto. Una pagina d' esempio molto banale di utilizzo di queste funzioni: <?php $test = new noSentinel(0); echo "<br />"; echo($test->show_version()."<br />"); echo($test->show_counter()."<br />"); echo($test->banner()); ?> noSentinel, version: 0.0.1 noSentinel Attack locked: 159 Come potete vedere quella che si nota maggiormente è il banner che viene centrato tramite gli appositi tag html. Lo stile dei link cambierà a seconda dello stile (stile inteso come colore e carattere del font) adottato dal vostro sito web, ma non le dimensioni. Sorgente con evidenziazione : qui Sorgente versione .txt: qui Archivio tar: qui Discussione di riferimento: qui Sorgenti e guida rilasciati sotto licenza Creative Commons Attribution-Share Alike 2.5 Italy License. Potete condividere liberamemente la guida ed i sorgenti ed utilizzarli a patto che citate la fonte, ovvero mettendo un link a http://nessuno.gotdns.org/ e/o al forum http://nessuno.gotdns.org/forum/. (potete usare la funzione banner(); ;-) ) |