sperimentazione PHP, tecnologia, Linux, retrogames, e pensieri sparsi

Uncategorized

Compilare PHP in codice nativo

Il linguaggio PHP non è solo uno script per generare pagine web in modo dinamico, ma se si è già capitato in  passato, è un ottimo strumento per creare programmi da eseguire al di fuori dell’ambiente web/apache.

Infatti è possibile creare velocemente anche programmi eseguibili in linea di comando.
Non si tratta di programmi stand-alone, ma piuttosto script che vanno lanciati tramite php (la versione CGI).

Tutte le potenzialità web del linguaggio sono sfruttabili anche per creare propri programmi. E’ facilissimo recuperare un file dal web da cui estrarre alcune informazioni. (in altri linguaggi sarebbe più complicato)

Tutto questo è possibile solo se è già installato PHP sul computer che viene lanciato lo script. (per esempio installando WAMP server)
Infatti il codice PHP, per essere eseguito, viene interpretato dalle librerie PHP (CGI).

E’ possibile anche compilare in nativo gli script PHP.

Significa che funzioneranno sul computer senza richiedere prima un’installazione del supporto PHP.

Read more »

Come risolvere Notepad++ 5.6 aggiornando è sparito il plugin Function List

Notepad++ è uno dei migliori editor di testo per Windows. Ma ad ogni aggiornamento sparisce qualche plugin.

Si tratta di un ottimo strumento per chi sviluppa in ambiente web grazie al fatto che permette di gestire in modo semplice e veloce i classici file html, css, js, php.

Infatti per chi come me, preferisce la velocità a tool pesanti e pieni di funzioni (usate poche e rare volte) come Zend oppure Eclipse, con Notepad++ si può editare qualsiasi file in modo semplice.

Notepad++, grazie al plugin”Function List” è lo strumento per preferisco per editare i file PHP.

E’ presente l’evidenziatore di sintassi, un suggeritore (con guida alle funzioni) e la lista delle funzioni.

(oltre al comodo tasto Alt-F1 che porta direttamente alla guida PHP del comando selezionato)

Veramente comodo.

Peccato che spesso ad ogni nuovo aggiornamento di Notepad++ qualche plugin sparisca per problemi di compatibilità.

 

Read more »

Vulnerabilità XSS – gli errori di sicureza più comuni

Gli attacchi XSS (cross-site scripting) sono i più insidiosi ed anche i più comuni.

Che si usi PHP oppure qualsiasi altro linguaggio per sviluppare un sito web dinamico, bisogna stare particolarmente attenti a come si gestiscono i valori che ci arrivano tramite POST e GET.

Per XSS si intende una tecnica che, inviando dei valori particolari alla pagina web, è possibile istruire la pagina a fare cose non previste.
In questo modo è possibile superare le protezioni delle pagine ed eseguire qualsiasi azione all’insaputa di chi sta guardando la pagina.

Uno degli ultimi casi ha coinvolto myspace. Tramite XSS è stato possibile creare un worm che si autoreplicava nella pagine di chi visitava il profilo di un utente infettato.
La tecnica utilizzata era molto sofisticata perché tramite XSS, il worm riusciva a recuperare la session dell’utente loggato e, utilizzando le funzioni di myspace, installarsi automaticamente nel profilo dell’utente.

Uno degli errori più comuni che aprono le porte ad attacchi XSS è una scarsa cura dei parametri POST e GET.

Le regole fondamentali per un buon utilizzo dei parametri che riceviamo ad uno richiesta si possono elencare in:

- se il campo arriva solo da un form allora utilizza sempre e solo $_POST (mai $_GET oppure $_REQUEST) (attenzione è possibile creare un form che esegue una action GET)

- se il campo attiva solo tramite url allora utilizza sempre e solo $_GET (stesso ragionamento di sopra)

- se il campo può contenere solo un valore numerico allora normalizzalo tramite “intval” oppure “floatval”

- se devi visualizzare il campo nella pagina HTML, utilizza sempre “htmlspecialchars” in modo da codificare eventuali caratteri malevoli

- se utilizzi il valore del campo per comporre una query, quando stringa utilizzare sempre addslashes mentre se numero valgono le regole esposte sopra (p.e. intval)

- se il campo è una stringa su singola linea meglio togliere eventuali “\n” oppure “\r” con str_replace (per evitare un injection quando si invia una mail con questi valori)

Google: questo sito potrebbe arrecare danni al tuo computer

Un sabato di inverno come tanti altri, uggioso freddo e con il raffreddore. Ma quando non te l’aspetti ecco la sorpresa.

Oggi ora 15.50 (circa), ad ogni ricerca fatta con google tutti i  risultati risultano bloccati perché ritenuti dannosi.

Il problema coinvolgere non solo google.it, ma anche google.com e forse tutti i datacenter di google (dato che ho provare le ricerche anche sullo UK ed il risultato è lo stesso).

Perché il messaggio?

E’ già da parecchi anni che lo spider di google non si limita solamente ad indicizzare le pagine trovare ed a creare la cache per tutti i siti dell’interno universo internet. Ma inoltre “analizza” il contenuto per scovare eventuali siti infetti dai vari script che possono, potenzialmente, infettare direttamente il computer di chi visita il sito.

Per mitigare il problema, i siti ritenuti infetti, appaiono nei risultati delle ricerche con l’avviso “questo sito potrebbe arrecare danni al tuo computer”. E cliccando sul link proposto da google, non si viene portati sul sito ma su di una pagina che avverte del problema.

Oggi sembra che tutta internet risulti infetta (secondo loro) e per questo qualsiasi sito risulti dalla ricerca risulterà irraggiungibile cliccandosi sopra perché apparirà la pagina di avvertimento rischio potenziale.

La cosa ridicola che pure i siti di google risultano “potenzialmente pericolosi”.

Una gran bella brutta figura per il motore internet con la g maiuscola.

— Aggiornamento delle 18.39

Il problema sui risultati è stato risolto verso le 17.30. Dopo un po’ di tempo è apparsa la spiegazione sul blog di Google.
Il problema sembra essere nato per una errata interpretazione del file di aggiornamento ricevuto da StopBaware.org. Google utilizza quel file per ricevere un elenco aggiornato sui siti infetti.
L’importazione di oggi è andata male (sembra per un url con una barra di troppo) e Google ha fatto un ragionamento “all url has infected”.
Come tradizione americana vuole, anche se sul blog non c’è scritto, saranno saltate delle teste. (cmq dal tono usato Marissa Mayer e dal fatto che ha evidenziato “errore umano” qualcuno avrà sudato in queste ore di panico)

(l’immagine su google “che fa male” la lascio perché è molto bella)

Google nuoce al tuo computer

Google nuoce al tuo computer

Chi ti frulla il tuo nuovo iPhone?

image Ormai è una tradizione, ed anche questa volta quel mito di Tom Dickson si è fiondato sul nuovo giocattolo della Apple, appena uscito nei negozi, per rispondere alla domanda che attanaglia migliaia di appassionati:

Will it blend?

Più o meno in italiano corrisponde a "si può frullare?" (anche se suona male).

Prima della risposta vi voglio descrivere di cosa sto parlando.

"Will it blend?" è una fortunatissima serie simil-viral iniziata tantissimi anni fa.

Tutto nasce dall’esigenza di pubblicizzare su internet un frullatore di grande potenza, il "magnifico" Total Blender.

Cosa si poteva fare? Il solito sito triste in cui si parlava delle solite cose e dicendo di essere meglio degli altri oppure provare sul campo la potenza del prodotto?

Beh, la risposta è stata, perché non far vedere che cosa si può frullare con il nostro frullatore, soprattutto se la roba frullata è roba non-convenzionale? (mica pensavate solo al frullato di banane?)

E tutto nasce da questa intuizione. Da quel momento sono stati prodotti dei video fenomenali in cui il presentatore (Tom Dickson) dimostra come frullare una lattina di coca (piena), oppure delle palline da ping pong. E soprattutto dopo la frullatura che cosa rimane. (e spesso il risultato è spaziale)

Tra le cose frullate dell’ultimo periodo troviamo: il Wiimote, la chitarra Guitar Hero, il DVD di GTA4.

Mentre l’ultima frullata l’hanno voluta dare al nuovo iphone. Ma, quasi fosse un rito, prima il mitico Tom è andato a farsi la fila, insieme agli altri fan della Apple, per accaparrarsi tra i primi il nuovo gingillo. (guardate cosa succede quando chiede l’iPhone ad una passante che lo riconosce!)

Una volta portato a casa l’iPhone, invece di coccolarlo lo infila nel frullatore.

Il risultato? Meglio che lo guardiate con i vostri occhi! (apple smoke)

Qui trovare il video della frullata dell’iPhone.

Mi trasferisco, il sito

Da oggi (12/07) ho trasferito il blog su di un altro provider. La cosa è praticamente "trasparente" in quanto ho attivato un plugin di Wordpress che redirige chi usa l’indirizzo vecchio in modo automatico a quello nuovo. (o chi arriva attraverso google & c.)

Il nuovo indirizzo è molto più semplice del precedente:

www.areaaperta.com

Sicurezza in PHP (2 p.) – la sessione ed i cookie

Nella parte precedente sulla sicurezza PHP abbiamo visto insieme come proteggersi dagli attacchi di injecting (e da altre varianti), ora passo all’argomento "sessione e cookie".

Uno degli attacchi più pericolosi è quello chiamato "session fixation" che permette ad un aggressore di ottenere lo stesso livello di accesso della vittima, per entrare liberamente nell’area privata di un sito e fare così qualsiasi operazione.

Basti pensare a quale danno potrebbe fare un hacker se riuscisse a collegarsi al sito della banca, dove hai il tuo conto online, e potesse operare sui tuoi soldi (prelevare o fare bonifici).

Ma prima voglio illustrarvi che cosa sono la sessione ed i cookie e come funzionano, in modo da comprendere meglio come funzionano gli attacchi ed i metodi per proteggere il proprio sistema PHP.

La sessione per PHP non è nient’altro che un "contenitore" in cui è possibile memorizzare variabili ed oggetti. Questi dati memorizzati nella sessione rimangono validi tra una pagina e l’altra del sito (se rimaniamo nello stesso dominio).

La sessione viene assegnata ad una specifica "sessione di lavoro" del navigatore.

Se io apro sul mio computer due browser, visito un sito con sessione. Le due finestre avranno due sessioni distinte.

Per identificare una sessione dalle altre viene assegnato un ID unico.

Nel caso di un sito con una area privata protetta da password, nel 99% delle implementazioni, viene usata la sessione per mantenere memorizzati i dati dell’accesso, in modo da permettere all’utente di navigare sull’area tra una pagina e l’altra senza perdere i dati del suo login.

Fisicamente la sessione è un file che il server memorizza sul suo disco, se opportunamente configurato si tratta di un file che non può essere raggiunto direttamente da un programma PHP.
Il file di session rimane valido finché la sessione risulta valida, viene "buttato" quando la sessione scade.

Quando scade la sessione?

- dopo un lungo periodo di inattività in cui quella specifica sessione non viene riattivata (vediamo più avanti come si riattiva, non è processo automatico ma viene richiesto tramite comando PHP)
- attraverso un comando PHP per eliminare la sessione corrente
- viene cancellato il file di sessione memorizzato su server

Come si crea o riattiva una sessione?

In PHP la cosa è molto semplice.
Il comando session_start() dice al server di riattivare la sessione oppure, se la sessione non esiste ancora, di crearla.
Dopo il comando sarà possibile utilizzare la sessione tramite la variabile (array) globale $_SESSION.
Per leggere un valore:
echo $_SESSION['nome variabile'];
Per memorizzare un valore nella sessione attuale:
$_SESSION['nome variabile'] = ‘valore’;

Come fa il server a riconoscere la mia sessione?

Per capire quale sia la sessione del visitatore, PHP crea un cookie di nome PHPSESSID che conterrà l’ID unico della sessione.
Nel caso la navigazione avvenga senza cookie è possibile usare un metodo alternativo di richiamo della sessione, per passare l’ID bisogna mettere nell’URL il parametro GID.
Per esempio: http://www.prova.ww/login.php?GID=ii4848nfnjdksn3872nsorffjw3f

Dove sono le vulnerabilità?

Se prendiamo un esempio classico in cui i miei dati di accesso sono memorizzati nella sessione con ID = A1, chiunque si faccia riconoscere dal server con ID = A1 otterrà i miei dati di sessione. (perché il server pensa che sia sempre io)

Prima di questo però è necessario che l’hacker rubi il nostro ID. I metodi per farlo sono abbastanza semplici e veloci (ma evito di metterli per non rendere la vita facile ai buontemponi).
Vi descrivo i due meccanismi principali:
- tramite un attacco di inject, l’hacker si fa spedire (di solito tramite GET) l’ID della sessione utente
- usando il XSS oppure le vulnerabilità dei browser si riesce a leggere i cookie dei domini non di pertinenza e riusciendo così a recupere il cookie con l’ID di sessione

Spesso gli hacker sfruttano il fatto che un utente naviga spesso su più sito contemporaneamente.
Il caso più classico è quello in cui entro nel sito della mia banca quando ho già un’altra finestra browser in cui ho aperto un altro sito (magari poco sicuro).
Se il secondo sito contenesse del codice malevolo, codice dedicato a rubare le sessioni, il sito della banca pur con tutte le protezioni del caso può fare ben poco per evitare questo attacco. (specialmente quello del furto dei cookie)

Un consiglio, quando dovete aprire il sito della vostra banca oppure altri siti di vitale importanza, chiudete tutte le altre finestre, così vi evitate brutte sorprese.
Inoltre fate sempre il logout prima di chiudere il browser, in modo da "annullare" la vostra sessione. Così che chiunque sia riuscito ad avere il vostro ID non possa comunque più far nulla. (in quanto il server non la riconoscerà come sessione valida)

Una volta rubato l’ID all’hacker basta visitare il sito inserendo l’ID della vostra sessione. Nel caso il sistema non sia troppo intelligente assegnerà la vostra sessione all’hacker permettendogli così di fare quello che vuole.

Per fortuna le applicazioni PHP più famose ed utilizzate sono già da tempo sono immuni dalla maggior parte di queste vulnerabilità.

Come possiamo proteggere le nostre applicazioni da questi attacchi?

Analizzando il metodo in cui viene rubato l’ID della sessione, è possibile porre alcuni rimedi per limitare questa vulnerabilità.
Di solito dal momento in cui l’ID viene rubato a quando effettivamente l’hacker lo utilizza passa un po’ di tempo.
Se l’ID cambiasse spesso darebbe nelle mani dell’hacker un ID che dopo pochi minuti risulterebbe non più valido.

In PHP si può (deve) usare la funzione:
session_regenerate_id(TRUE)

In questo modo si obbliga PHP ha rigenerare l’ID di sessione e con il parametro a TRUE, si obbliga a cancellare la vecchia sessione associata al precedente ID.

Consiglio di usare sempre questa funzione in modo da rendere praticamente inutile rubiare l’ID di sessione, solo in casi rarissimi potrebbe dare problemi.

Ecco il flusso di funzionamento di una sessione più resistente ai furti:

session_start() -> carica la sessione attuale, valorizza $_SESSION, oppure se non esiste creane una nuova
session_regenerate_id(TRUE) -> crea un nuovo ID di sessione, mantenendo i valori in $_SESSION, cancella il vecchio ID

Altri problemi con i cookie?

Spesso ho visto in alcuni script PHP che venivano salvate nei cookie un sacco di informazioni più o meno importati.
Come abbiamo visto i cookie sono molto vulnerabili e, spesso grazie a problemi nei browser, gli hacker riescono facilmente a recuperarli e leggerli.

E’ da evitare assolutamente la memorizzazione nei cookie di user e password. Inoltre se dovete memorizzare qualcosa di importante usare la criptazione. (come SHA1 o MD5)

Per evitare che qualcuno mi rubi l’ID oppure i cookie possono verificare l’IP?

E’ uno dei metodi più usati per identificare se l’utente è sempre lo stesso dall’inizio alla fine della navigazione.
In realtà non è però il più affidabile, perché certi provider (specialmente americani), possono rendere dinamico l’IP dell’utente che noi vediamo. In realtà per l’utente il suo IP è sempre lo stesso, ma invece il server potrebbe, in questi casi, vedere cambiare l’IP ogni tanto.
Non è una pazzia del provider, ma un metodo per avere un maggior numero di utente su di un pool limitato di indirizzi internet. (un po’ come fa Fastweb)

Se si vuole legare all’informazione della sessione anche un dato identificato dell’utente è possibile utilizzare l’agent del browser, perché si presume che dall’inizio della navigazione fino alla fine questo non possa cambiare. (stiamo parlando di utente normali e non di sviluppatori che possono modificare inavvertitamente questo valore per i più disparati motivi)
Inoltre è una buona informazione che difficilmente un hacker cerca di emulare.
Nel caso vogliate una protezione potete considerare di verificare l’agent, se cambia invalidate la sessione e riportate l’utente al login.
Tenete però sempre presente che non si tratta di un dato obbligatorio, ci possono essere dei casi in cui il server non lo possa ricevere.

E’ arrivato Silverlight -> il rivale di Flash

Sarà che c’è nell’aria ancora un po’ l’aria di “vacanza”, ma mi era proprio sfuggito, e dai vari feed che non leggo non ho trovato quasi nulla, che il 4 è uscito Silverlight.

Era stata fatta una preview per sviluppatori ad aprile, ma ora il prodotto è ufficiale.

Per chi non lo conoscesse si tratta del nuovo prodotto micro$oft destinato a fare concorrenza (spietata) a Flash.

In pratica è il plugin (così vorrebbe Bill) da installare su tutti i browser per godersi i contenuti dinamici da Internet.

Read more »