A tutta velocita’ con PHP-FPM

PHP-FPM Very Fast

Come sa bene chiunque si occupi di creare e gestire un servizio Web moderno, il primo aspetto che viene ricercato e di cui si chiede la massima affidabilita’, e’ la velocita’ di risposta, cosi da garantire la presenza online delle imprese supportando il lavoro quotidiano delle Web Agency.

Nonostante oggi giorno ci siano nuovi linguaggi di sviluppo e di scripting il PHP rimane comunque ancora uno dei piu’ utilizzati e, grazie alle nuove funzionalita’ del PHP-FPM, questo linguaggio tornera’ sicuramente ad avere un ruolo di rilievo.

Ma, facciamo un piccolissimo passo indietro per rivedere come sono state gestite fino a ieri tutte le richieste php fatte dagli utenti ai vostri siti.

La maggior parte degli amministratori di siti sa che il PHP può essere incorporato nell’ HTML e che funziona con i principali web server. Tuttavia, l’aspetto meno conosciuto è la modalità con cui può essere eseguito il PHP sul web server, e questo può avvenire in diversi modi.

Aggiungiamo nell’equazione anche l’acronimo LAMP che, per chi non lo conoscesse, indica una piattaforma software per lo sviluppo di applicazioni web e sta per :

  • Linux (il sistema operativo)
  • Apache (il server web)
  • MySQL o MariaDB (il database management system)
  • PHP (il linguaggio di programmazione)

Come stavamo dicendo, fino a ieri  la modalità con cui si eseguivano le richieste e i processi di php sulla piattaforma LAMP era il PHP FastCGI.

Si tratta di un protocollo generico utilizzato per l’interfacciamento con un server web. Nello specifico è una variante della precedente Common Gateway Interface (CGI) che ha come obiettivo quello di ridurre il sovraccarico associato all’ interfacciamento tra web server e programmi CGI, consentendo ad un server di gestire più richieste contemporaneamente.

Ma con FastCGI è possibile configurare più versioni di PHP, cosa particolarmente utile quando si hanno vecchi siti web creati, ad esempio, in PHP 5.1 che non sono compatibili con l’ultima versione, inoltre, con FastCGI è possibile supportare diversi utenti ognuno con le proprie istanze di PHP. Questa funzione è particolarmente importante per migliorare la sicurezza in un ambiente condiviso, in cui è possibile avere utenti diversi che gestiscono ciascuno i propri siti web.

Andiamo ancora avanti, quindi grazie al protocollo PHP FastCGI il webserver genera un’ unico processo in fase di inizializzazione che, al termine della fase di start-up, si mette in attesa. Ogni volta che arriva una nuova richiesta in ingresso, il webserver apre una connessione con il processo fast-cgi (in attesa) che a sua volta genera l’output sulla connessione con il client, trasferitagli dal server. Il vantaggio principale di questo protocollo è la creazione dei processi solo in fase di inizializzazione, ottimizzando così il numero dei processi php.

Bene, quindi cerchiamo di capire adesso che cosa cambia con l’introduzione di PHP-FPM ?

PHP-FPM è una modalità più recente (nato nel 2004 come patch di PHP) di utilizzare PHP con un server web, ed è un’alternativa al precedente PHP FastCGI con l’implementazione di alcune funzionalità aggiuntive molto utili, in particolare ai siti che gestiscono quotidianamente sempre più traffico (dai siti vetrina agli e-commerce). Per queste tipologie di siti web è sempre piu’ necessario avere a disposizione strumenti sempre più performanti, proprio come il PHP-FPM.

Fino ad oggi una delle grosse mancanze di FastCGI è stata l’impossibilità di avere un numero di CHILD (processi) PHP che cambi in modo dinamico a seconda delle richieste effettive.

Nel suo insieme, il funzionamento è molto simile al FastCGI e si basa dunque sull’ esecuzione ottimizzata dei processi php che vengono creati solo in fase di inizializzazione e rimangono in attesa di una nuova richiesta. La grossa differenza sta nel fatto che è lo stesso PHP-FPM ad eseguire il processo e non più il web server.

Il “Process Manager” è uno script che gestisce direttamente i processi PHP, nella pratica attende e riceve istruzioni dal server web ed esegue gli script PHP richiesti, permettendo cosi ad un sito web di gestire carichi intensi. Il PHP-FPM mantiene dei “pool” per rispondere alle richieste PHP e i processi che si generano sono direttamente “figli” (CHILD) del Process Manager e possono quindi essere gestiti separatamente dal web server.

Questa modalità garantisce una maggiore robustezza del servizio, poiché tutte le operazioni come i cambi di configurazione o il restart dei processi, impattano i singoli pool FPM e non più l’intero web server.

Ecco alcune delle interessanti caratteristiche tecniche:

  • Demonizzazione dei processi PHP (file PID, file log, setsid(), setuid(), setgid(), chroot();
  • Possibilità di riavviare i processi PHP senza causare alcuna interruzione delle richieste in fase di processamento, si potra’ quindi cambiare qualsiasi parametro nel file di configurazione o addirittura aggiornare PHP senza avere nemmeno 1 secondo di downtime;
  • Possibilità di non processare le richieste provenienti da un determinato IP;
  • Possibilità di avviare i CHILD sotto differenti UID/GID/CHROOT e con differenti impostazioni di PHP (php.ini) il tutto senza bisogno di safe mode;
  • Possibilità di loggare tramite stdout e stderr;
  • In caso di corruzione della memoria RAM condivisa utilizzata da un OPCode Cache, PHP-FPM può effettuare un riavvio di emergenza di tutti i CHILD PHP;
  • Forza l’arresto dell’esecuzione di uno script nel caso in cui set_time_limit() avesse dei problemi.

Secondo un recente articolo pubblicato su CloudWays, effettuare uno switch da mod_php a PHP-FPM permetterebbe, tra i tanti vantaggi attesi, di ridurre del 300% i tempi di caricamento delle Web Application a traffico elevato.

5G vantaggi e pericoli

Mobile internet and hacking concept with 5G

E’ ormai un’argomento caldo quello del 5G, e quasi sicuramente, nell’immaginario collettivo si tratta di un’ altro potenziamento per la rete mobile che ci dovrebbe permettere di scaricare video, documenti e musica più velocemente sui nuovi smartphone.

Ma se così non fosse???.

Ad un’analisi piu’ attenta dobbiamo meglio specificare che il 5G non serve realmente agli smartphone. Certo, verrà usata anche come infrastruttura per la comunicazione mobile al posto del 3G e in parte del 4G, ma il vero punto della questione è altrove. La forza di questa nuova implementazione avra’ altre caratteristiche in quanto, mentre il 3G e il 4G sono le tecnologie che ci hanno portato Internet sui nostri smartphone, creando per la prima volta una connessione tra gli uomini e la Rete, in qualsiasi momento H24, il 5G è pensato invece per connettere le macchine ad Internet.

Con l’avvento del 5G, la rete mobile avrà la potenza per gestire milioni di piccoli dispositivi (IoT),  sempre connessi,  che genereranno una ulteriore mole di dati che andranno anch’essi trasferiti a centrali di analisi nel cloud. Non è un caso che le sperimentazioni attualmente in progetto siano proprio improntati nel rendere hi-tech le attività industriali molto complesse.

Ma le grandi promesse dell’avvento del 5G sono accompagnate anche da grandi sfide. La piu’ grande tra le promesse fatte dal 5G e’ quella di poter rendere tutto super-connesso, aumentando le prestazioni, i rendimenti ed il controllo; tutto bello ed interessante ma esponenzialmente piu’ pericoloso dal punto di vista di possibili attacchi hacking.

Attacchi, fraudolenti, compiuti tramite “malware” o “ransomware” di ogni tipologia ormai non si contano e riempiono le pagine delle cronache di citta’ di tutto il mondo, si va da intere amministrazioni cittadine bloccate con richiesta di riscatto, porti o aeroporti, ospedali etc…. tutti fatti accaduti negli ultimi due anni in citta’ importanti americane come europee ed i danni sono incalcolabili, sia per gli affari che per la sicurezza delle persone.

Immaginatevi un’ ospedale bloccato, con strumentazioni per esami clinici di ogni tipo fermi e, cartelle cliniche impossibili da aprire perche’ digitali e quindi crittografate del ransomware, etc… etc…., peggio di un film di Hitchcock.

Tutto questo perche’ mettere online tutte le funzioni chiave di una struttura significa dover trovare un modo per proteggerle sia da chi vuole prenderne il controllo, sia da chi vuole semplicemente bloccarle.

Vi ricordate quel caso del pilota della Germanwings che fece schiantare l’aereo? Dopo quel tragico evento qualcuno ipotizzo’ di mettere su ogni aereo un sistema di controllo da terra che potesse permettere di prendere il totale controllo di un aereo per farlo atterrare in sicurezza. Certo l’intento e’ piu’ che giusto, ma il problema sarebbe dover garantire al 100% che nessuno possa inserirsi in un sistema del genere per, invece, creare incidenti disastrosi o minacciarli in cambio di denaro. Ve lo immaginate essere su un’aereo che non puo’ atterrare perche’ gestito da terra da qualche criminale che aspetta di essere pagato, con tutti i passeggeri in ostaggio ed il pilota tagliato fuori da ogni possibilita’ di controllo?? Beh un vero e proprio incubo.

Purtroppo, la messa in sicurezza non è semplice e, nonostante il fatto che con l’arrivo del 5G ci si dovrebbe poter liberare di alcuni vecchissimi sistemi come l’ SS7, una tecnologia usata da 40 anni dagli operatori per gestire la sicurezza delle connessioni ma che non usava la crittografia o ancora il seppur piu’ moderno Diameter, che non sembra essere all’altezza del compito, non basteranno, per lo meno nell’immediato, a garantire completamente l’alto tasso di sicurezza che servira’ per tenere al sicuro i dati di societa’, enti e privati (pensate alle case domotiche).

Molti esperti hanno pubblicato test e studi, lamentando di come si stia dando troppo valore alla gestione di questi dati ed alla loro sicurezza semplicemente perche’ saranno crittografati, ma anche la crittografia ha mostrato molte lacune, e sono moltissimi gli eventi negativi che impattano su errori di programmazione e/o l’implementazione dell’uso di sistemi crittografati in ogni ambito, commerciale e non.

Si spera che per quando il 5G sarà una realtà affermata, le cose saranno state implementate a dovere.

Ma la sicurezza informatica non è l’unico punto critico per il 5G. Anche la semplice copertura del segnale potrebbe rappresentare per gli operatori uno scoglio importante. Infatti, le frequenze usate, sono ideali per quello che riguarda il trasferimento ad altissima velocità dei dati, ma poco adatte agli ambienti “affollati” di ostacoli come quelli cittadini. E’ proprio a causa del numero elevato di antenne che serviranno ad implementare la struttura del 5G, per coprire in maniera efficace una città, che i produttori stanno preparando sistemi che possono essere incorporati ovunque, dai lampioni alle pareti degli edifici, passando per semafori e qualsiasi altro possibile “punto di appoggio”.

Il problema della scarsa penetrazione e capacità di rimbalzo delle onde radio usate dal 5G porterà a costi molto elevati nella creazione dell’infrastruttura che dovrebbe far diventare smart le nostre città.
Gli alti costi potrebbero ulteriormente lievitare anche a causa di dispute geo-politiche come quella tra il governo statunitense e l’azienda cinese Huawei, che al momento è una delle aziende più avanti nella sperimentazione 5G e nella produzione dell’hardware necessario a implementarlo. Senza di loro, o con una forte limitazione della
loro presenza negli Stati alleati degli Stati Uniti, l’adozione del 5G sarà sicuramente rallentata.

Probabilmente si dovrebbe parlare anche dei possibili rischi inerenti alla salute nell’utilizzo delle frequenze necessarie all’uso di questa implementazione tecnologica ma qui il discorso dovra’ attendere parecchio tempo e molti studi futuri, dei quali noi saremo le cavie.

Staremo a vedere !!!

Facebook Bug Bounty

Facebook Bug-Bounty

Forse non molti sanno che in un periodo cosi proficuo per attacchi hacking di ogni tipo, i colossi del web, tra cui Facebook, hanno istituito interessanti premi per chiunque voglia testare la sicurezza dei loro sistemi, ed affiliati quali:

 

  • Instagram
  • Internet.org/Free Basics
  • Oculus
  • Onavo
  • Progetti open source di Facebook (ad es. osquery)
  • WhatsApp

 

Migliori spiegazioni le potete trovare alla seguente pagina https://www.facebook.com/whitehat
che riporta in modo chiaro quali sono le regole e le modalita’ di svolgimento del “Programma” WHITEHAT

Nella pratica, possiamo dire che i responsabili della sicurezza di Facebook, Instagram e compagnia bella hanno deciso che il miglior modo per verificare il loro buon operato e’ quello di lasciare “carta bianca” a tutti coloro (hacker, whitehat, pirati informatici …) che sono interessati a bucare uno dei due miliardi di account dei loro social.

La ricompensa base e’ di 500 $ ma ben piu’ alta e’ la posta se qualcuno dovesse trovare bug ben piu’ importanti come degli zero-day.

Per exploit di alto impatto , la ricompensa dovrebbe essere di, 40.000 $ se, per impadronirsi dell’account, l’attacco non richiedera’ la ben che minima interazione del proprietario, Si scende invece a 25.000 $ se l’attacco e’ in grado di andare a segno con l’interazione da parte del proprietario dell’account (magari anche solo con un click sul link sbagliato ricevuto via mail…..phishing a go-go).

Buona caccia…..

#FacebookBugBounty

NGROK – reverse proxy server cross-platform

ngrok mostrare un sito in locale

Ngrok Pubblica il tuo sito in localhost

Lo sviluppo di siti e di Webb Application e’, al giorno d’oggi, uno dei core business piu’ importanti per la maggior parte delle aziende in tutto il mondo, motivo per cui sono nati una grande quantita’ di tool per agevolare i web developer durante tutte le operazioni di sviluppo, test e produzione.

Molto spesso capita che non si abbia il tempo o anche il budget per gestire piu’ ambienti di sviluppo, cosi ci si riduce per avere tutto il proprio ambiente [sviluppo / test / pre produzione] soltanto sul proprio pc.

Come fare quindi se c’e’ bisogno di mostrare l’avanzamento del lavoro al cliente senza dover prima creare e/o aggiornare gli altri ambienti di test/pre-produzione??? …. e’ per aiutare in questa pressante fase che e’ nato un tool come ngrok.

Ngrok e’ un reverse proxy server con cui e’ possibile rendere “pubblico” un server locale, anche se e’ collocato dietro un NAT od un Firewall, il tutto tramite secure tunnel. Quindi attraverso Ngrok si potra’ implementare un personal cloud service direttamente dalla propria postazione di lavoro realizzando cosi uno stack LAMP/LEMP

 

INSTALLAZIONE

mkdir ngrok
cd ngrok/
wget -c https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
unzip ngrok-stable-linux-amd64.zip

Dopo aver installato il pacchetto possiamo fare una prova, se ad esempio usate come web server Apache, potete farlo in questo modo;

sudo nano /var/www/html/index.html

<!DOCTYPE html> <html> <body> <h1>Prova</h1> <p>Test di Ngrock.</p> </body> </html>

Salviamo il file e ora possiamo avviare il tool puntandolo sulla porta su cui abbiamo in ascolto il nostro Web server:

ngrok http 80

Una volta lanciato il comando ci apparira’ qualcosa di simile:

Session Status online Session Expires 7 hours, 53 minutes
Version 2.2.8 Region United States (us)
Web Interface http://127.0.0.1:4040
Forwarding http://44c9afca.ngrok.io -> localhost:80
Forwarding https://44c9afca.ngrok.io -> localhost:80

Una volta avviato possiamo dunque iniziare ad usarlo anche tramite la comoda interfaccia Web:

http://localhost:4040

ngrok localhost

Tornando alla descrizione del Tunnel appena creato, le voci a cui dobbiamo fare caso sono:

  • Web Interface: tramite questo indirizzo potrai accedere ad un’interfaccia web dove puoi monitorare tutte le attività associate all’url che hai appena creato. Questo vuol dire che potrai vedere quanti utenti si stanno collegando ed altre informazioni.
  • Forwarding: questo è il link che dovrai fornire al tuo cliente. Hai entrambe le versioni, sia http che https. Lavorando in locale probabilmente userai quasi sempre l’http.
  • HTTP Requests: In questa sezione vedrai in tempo reale tutte le richieste http che vengono fatte tramite il tuo link. Ti è utile per capire se qualcuno sta guardando il sito in un dato momento.

Quindi dando al proprio cliente il link http://44c9afca.ngrok.io  quest’ultimo avra’ accesso alla root web del localhost

Questo vuol dire che se stai utilizzando MAMP o XAMPP verrà servito il file index.php all’interno della tua cartella /htdocs

Se invece utilizzi WAMP su Windows il tuo tunnel porterà gli utenti alla index.php della cartella www

Per coloro che utilizzano un Virtual Host per gestire i tuoi progetti la procedura e’
leggermente diversa ma pur sempre semplice; nella pratica bastera’ aggiungere un solo
parametro, come nell’esempio seguente:

ngrok http -host-header=miosito.dev 80

dove ovviamente al posto di “miosito.dev” metterete l’indirizzo del vostro in locale. ** WordPress per coloro che invece usano la piattaforma di WordPress si dovranno applicare altri accorgimenti per far in modo che il vostro cliente veda correttamente il sito. Questo perche’ tutti gli url che creati da WordPress sono assoluti ovvero mostrano per esteso l’indirizzo di un determinato documento. Per poter effettuare questo tipo di modifica consiglio di utilizzare un comodo tool come Relative URL , un tool che fa gia parte dei plugin consigliati da WordPress, con il quale sara’ possibile modificare URL da qualcosa come questo (esempio):

http://localhost:8080/wp/2012/09/01/hello-world/

in qualcos’altro come questo:

/wp/2012/09/01/hello-world/

Una volta effettuate tutte le modifiche del caso bisognera’ aggiornare il file wp-config.php
inserendo, prima della riga “/* i parametri dei re indirizzamenti, qualcosa del tipo:

define('WP_SITEURL', 'http://' . $_SERVER['HTTP_HOST']);
define('WP_HOME', 'http://' . $_SERVER['HTTP_HOST']);

PS:Ricordatevi di disinstallare il plugin e rimuovere le righe di codice dal file wp-config.php quando metterete il sito online.

Le configurazioni possibili con Ngrok sono davvero svariate e potete trovare tutto cio che non e’ stato contemplato in questo articolo, direttamente sul sito del progetto NGROK