La completissima guida al sommergibile più famoso della rete SubSeven 2.2 by luca29t |
|
|
informazioni prese qua e la dalla rete.
CGICGI (Common Gateway Interface) e' un insieme di comandi e di variabili di memoria attraverso cui il server web puo' comunicare con altre applicazioni e programmi autonomi. CGI permette ad un web server di comunicare con altri programmi in esecuzione sul server stesso. Per esempio, utilizzando CGI il web server puo' chiamare programmi esterni fornendo in input dei dati in modo esplicito (per esempio tramite un form in una pagina web) oppure implicito (per esempio tramite gli header HTTP). CGI e' la tecnologia piu' diffusa dal lato server, e al giorno d'oggi praticamente ogni server web ne prevede il supporto. E' utilizzato comunemente per i contatori, i libri degli ospiti, per i giochi e le interazioni con i database in generale. Un programma CGI puo' essere scritto praticamente in qualunque linguaggio di programmazione, anche se i linguaggi piu' utilizzati sono C/C++ e Perl. Perl e' particolarmente indicato in quanto e' un linguaggio di alto livello e interpretato: cio' rende i programmi scritti in Perl facilmente portabili da una piattaforma all'altra, soddisfacendo un requisito fondamentale per Internet. D'altra parte, la flessibilita' e complessita' di Perl fanno si' che il codice, se non opportunamente commentato, sia difficile da capire da parte di un altro autore o di un lettore.
Che siginifica CGI? CGI significa Common Gataway Interface. Con la parola "Common" si intende che CGI può essere usato da molti linguaggi di programmazione e può interagire con molti tipi diversi di sistemi operativi e macchine. La parola "Gateway" suggerisce che la forza dei CGI non sta in quello che può fare in sé e per sé, ma nell'accesso potenziale che offre ad altri sistemi, che possono essere magari database o generatori grafici. Interface significa semplicemente che CGI fornisce un mezzo ben definito per richiamare le sue caratteristiche -- in altre parole, che potete scrivere programmi che lo usano.
Che cosa è uno script? Molto semplicemente, uno script è un programma! La differenza fra i due termini praticamente è solo semantica. Tradizionalmente, i documenti eseguibili compilati (binari) sono chiamati programmi, e i programmi interpretati sono chiamati script. Nel contesto dei CGI, la distinzione è diventata ancora più sottile di prima. Le parole sono spesso usate come sinonimi (anche in questo sito).
Perchè dovrei mettere uno script sulle mie pagine? Innanzitutto, per invogliare la lettura, diciamo subito che con i programmi/script CGI si possono fare delle cose davvero magiche. E' possibile creare grafici al volo partendo da dei dati, accedere a database e ottenere risultati in un attimo, implementare cose di grande effetto sul vostro sito tipo guestbook, chat o counter, ed è perfino possibile semplificare il vostro lavoro (se siete webmaster). Certe volte potreste aver bisogno di mettere delle informazioni dinamiche (informazioni che non sono costanti) nei documenti HTML. Queste possono essere semplici informazioni, come un contatore che mostra la scritta "Sei il xxx visitatore!", ma possono essere anche molto più elaborate, come motori di ricerca o animazioni. Per ottenere questo genere di risultati dalle vostre pagine web avrete bisogno degli script CGI (anche se per certe cose potete usare anche JavaScript, ma questo è un altro discorso!) Che cosa è il Perl? Perchè molti lo usano per fare CGI? "Il Perl è un linguaggio interpretato ottimizzato per scandire file di testo, estrarre informazioni da questi file di testo e stampare i risultati basati su queste informazioni. La maggior parte delle applicazioni CGI hanno a che fare in qualche modo con la manipolazione di dati e con l'accesso a programmi e applicazioni esterne. Il Perl mette a disposizione strumenti che rendono questi compiti molto facili."
Perchè dovrei usare un CGI anzichè JavaScript? CGI e Java sono fondamentalmente diversi, e per la maggior parte dei casi NON intercambiabili, ovvero ciò che può fare uno, l'altro non fa. CGI è un protocollo per eseguire programmi su un server WWW. Anche se Java può essere usato in questo modo, e ha perfino un API standard (servlet, che invece è un'alternativa a CGI), il ruolo principale di Java sul web è per programmi dalla parte del client (gli applet). In certi casi i due possono essere combinati in una singola applicazione: per esempio un applet Java per definire una regione d'interesse da una mappa geografica, insieme a uno script CGI per processare una query per l'area definita.
In quali casi è meglio usare il C++ per scrivere un programma CGI? Nel caso in cui si abbia già familiarità con il primo. In effetti le differenze non sono moltissime e il motivo per cui la scelta ricade più spesso sul Perl è perchè si trovano un maggior numero di risorse scritte in questo linguaggio, perchè ha delle magnifiche capacità di manipolazione dei testi, e perchè ha un enorme supporto di moduli, sulla rete. Di cosa ho bisogno per installare un CGI? Per poter installare un CGI sulle proprie pagine è necessario avere un server proprio (se le vostre pagine web non risiedono su un server vostro, non disperate e leggete poco più sotto!). Non è richiesto l'uso di Unix, ma averlo installato sul proprio server aiuta parecchio visto che si tratta, al momento, della piattaforma più matura e meglio supportata per le applicazioni sul Web. Per la maggior parte degli script, è necessario possedere un interprete Perl installato sul proprio server. Le richieste specifiche variano da script a script, e generalmente vengono riportate nei file readme di ogni pacchetto CGI. Certamente fa comodo avere un'infarinatura dei sistemi Unix e magari conoscere anche un minimo di Perl, ma noi siamo qui per aiutarvi in questo! Posso installare un CGI anche se non ho un server mio? Fortunatamente si. Se le vostre pagine sono ospitate su siti che offrono spazio gratuito e non potete usare CGI, esistono sempre gli script eseguiti in remoto, in altre parole i programmi risiedono su server che processano le informazioni per voi e rimandano il risultato all'utente. In cambio del servizio, molti programmatori chiedono di inserire un'inserzione pubblicitaria vicino allo script o di pagare una quota, ma esistono anche molti programmi gestiti in remoto totalmente gratuiti e privi di pubblicità. In questo modo, molte tipologie di script possono essere usate anche senza possedere un server. Per ulteriori informazioni, consultate la sezione di "Programmi in remoto".
Sono disponibili spazi Web gratuiti che supportino CGI? Sempre fortunatamente, la risposta è si. Esistono svariati siti che offrono gratuitamente spazio web e insieme il ieno supporto per i CGI. Ecco qui elencati alcuni di questi siti: Prohosting (senza alcun banner ma a pagamento!) F2s (senza alcun banner ma a pagamento!) Posso usare un compilatore Perl per scrivere/testare i miei script su Windows? Si, esistono svariati compilatori disponibili gratuitamente su Internet per quasi tutti i sistemi. Con questi è possibile provare gli script che programmate. Tuttavia per poter testare uno script per il web è necessario installare un web server tipo IIS o Apache.
Dove trovo un compilatore di Perl? Ci sentiamo di consigliarvi ActiveState: sul sito si trovano le versioni basate su Perl 5.6.0 per Windows 32, per Linux e per Solaris.
Cos'è la directory cgi-bin? Un server è generalmente configurato in modo da eseguire gli script che sono posti nella directory "cgi-bin". Comunque, l'amministratore del server può anche cambiare i file di configurazione del server, in modo da poter fare eseguire gli script con certe estensioni (come .cgi, .pl) da ovunque.
Solitamente si ha un errore 500 per i seguenti motivi:
Cosa sono i permessi dei file? I sistemi Unix sono progettati per più utenti e includono provvedimenti per proteggere il vostro lavoro dall'accesso non autorizzato da altri utenti del sitema. I permessi di un file determinano chi può fare cosa con i vostri programmi, dati e directory. Il comando che configura tutto ciò è chmod (mentre il corrispettivo per visualizzare *quali* sono i permessi di un file è il comando ls). I web server solitamente funzionano come user "nobody". Il che significa che, tranne nel caso di bug molto seri (tipo quelli trovati in certe versioni delle estensioni Frontpage), i vostri file sono assolutamente al sicuro da danni attraverso il webserve. Significa anche che potreste dover fare dei cambiamenti per attivare l'accesso ai file da parte del server in un contesto CGI.
Cosa vuol dire User Nobody/Setuid? Ci sono due modi di eseguire i CGI: - di default, si eseguono come user webserver (nobody). Per la maggior parte degli scopi, questo è il modo più sicuro, dal momento che i dati sono protetti dal sistema operativo dagli accessi non autorizzati attraverso possibili bug nel vostro CGI. Comunque, quando il CGI deve scrivere su un file, quel file deve risultare scrivibile da ogni utente sul sistema, ed è quindi completamente sprotetto. - setuid, si eseguono sotto il vostro proprio userid. Questo significa che i file scritti dal vostro CGI possono essere al sicuro. D'altra parte, qualsiasi bug nel vostro CGI possono compromettere ora *tutti* i programmi e i dati sul vostro server. Come precauzione di sicurezza elementare, gli script non possono essere eseguiti da setuid dalla maggior parte dei Sistemi Operativi. Un terzo modo col quale non dovreste *mai* permettere di eseguire i CGI è: - come root o setuid root, possono essere eseguiti da qualsiasi utente. Ciò può risultare estremamente pericoloso, dal momento che qualsiasi bug potrebbe compromettere l'intero server, inclusi i file di ogni utente. Fortunatamente solo l'amministratore del sistema può installare programmi setuid root. Se siete fortemente interessati alla sicurezza, assicuratevi che nessun programma del genere (in particolare le estensioni di Frontpage) sia installato.
Che permessi dovrei assegnare ai miei CGI? Alcuni modi che possono essere utili in un tipico contesto CGI sono: * Programmi CGI, 0755 * File di dati che devono essere leggibili dai CGI, 0644 * Directory di dati usati dai CGI, 0755 * File di dati che devono essere scrivibili dai CGI, 0666 (i dati non hanno nessuna sicurezza!) * Directory di dati usati dai CGI con accesso alla scrittura, 0777 (nessuna sicurezza) * CGI che devono essere eseguiti da setuid, 4755 * File di dati per CGI setuid, 0600 o 0644 * Directory per dati usati da CGI setuid, 0700 o 0755
Posso vedere un esempio pratico? Ecco un esempio: ls -ls script.cgi 1 -rwx------ 1 utentixyz 974 Oct 31 22:15 script.cgi Dalla shell di Unix con il comando ls è possibile visualizzare i permessi di un file. Questo file ha dei permessi 0700, il che significa che nessuno (al di fuori di chi lo ha messo) può leggerlo, scriverlo o eseguirlo. Usando il comando chmod è possibile cambiare i permessi: chmod 755 script.cgi ls -ls script.cgi 1 -rwxr-xr-x 1 utentixyz 974 Oct 31 22:15 script.cgi Così facendo si sono cambiati i permessi in modo che gli utenti del gruppo "utentixyz", come anche tutti gli altri utenti, hanno il permesso di leggere ed eseguire questo file Perchè dovrei interessarmi della sicurezza dei CGI? Eh già! Perchè interessarsene? Daltronde il server sta girando come user nobody, giusto? Significa che non si può fare niente di pericoloso per i dati, giusto? Sbagliato. Possono succedere molte cose pericolose in diverse circostanze, per esempio:
A che genere di buchi nella sicurezza dovrei fare attenzione? Innanzitutto bisogna fare attenzione a non esporre mai nessun data form alla shell. Seguono alcuni esempi di possibili buchi nella sicurezza: open (COMMAND, "/usr/ubc/finger $form_user"); system ("/usr/ubc/finger/ $form_user"); @data = "usr/ucb/finger $form_user"; Un'altra cosa a cui occorre prestare mai attenzione è un riferimento di questo genere: http://www.pincopalla.it/cgi-bin/perl.exe?esempio.pl Anche all'occhio meno preparato in materia risulta chiato che se qualcuno cambiasse le ultime lettere in questo modo, http://www.pincopalla.it/cgi-bin/perl.exe?-e+'format:%20c' sarebbero guai per l'hard disk del server. Per evitare queste potenziali catastrofi ricordate di non tenere mai il file eseguibile del Perl sotto la directory "cgi-bin", mettendolo invece fuori dalla directory root del server. E' vero che i CGI scritti in Perl sono meno sicuri? I programmi CGI sono soggetti a problemi di sicurezza indipendentemente dal linguaggio con il quale sono scritti! Tuttavia è vero che gli script compilati in C++ "rendono il lavoro più difficile" agli hacker; questo non significa che siano più sicuri, ma soltanto che richiedono una ricerca del codice sorgente da parte dell'hacker per poterli interpretare. Ho trovato un CGI molto bello sulla rete e vorrei installarlo. Come posso dire se è sicuro o meno? Non si può mai dire definitivamente se uno script è sicuro o meno. La cosa migliore da fare, se conoscete anche minimamente il linguaggio nel quale è stato scritto, è capire cosa fa e come lo fa. Se invece non lo capite, provate a mostrarlo a qualcuno che conosca quel linguaggio. Cose a cui pensare quando si esamina uno script sono:
SSI (Server Side Include) è un valore variabile che un server può includere in un file HTML prima di mandare la pagina al richiedente (esempio pratico, un file con la data "Ultima modifica:"). Se state creando una pagina web, potete inserire una dichiarazione include nel file HTML come questa: Monday, 24-Jul-2000 11:31:36 EDT e il server otterrà la data dell'ultima modifica del file e la inserirà prima che il file HTML venga mandato al richiedente. LAST_MODIFIED è una delle diverse variabili di cui un sistema operativo può tenere traccia e che può essere richiamata da un server program. L'amministratore del server può mettere queste variabili in uso quando il sistema è configurato. Potete pensare a SSI come una versione limitata delle applicazioni CGI. Se si sta costruendo un sito e non si è l'amministratore del server, è una buona idea chiedere a quest'ultimo quali variabili possono essere usate e farsi aiutare nel mettere le dichiarazioni "include" appropriate nei propri file HTML. SQL (Structured Query Language) è un linguaggio interattivo di programmazione standard per ottenere e per aggiornare informazioni in un database. Diversi prodotti database supportano SQL con estensioni proprietarie per il linguaggio standard. Le Queries prendono la forma di una linguaggio di comando che vi permette di selezionare, inserire, aggiornare e cercare la locazione dei dati (spunto preso da http://cgi.webjuice.it/faq/index.php?p=cgi7)
Script CGI
|