Leaf: il Mouse Wireless che Si Carica da Solo

Il simpatico mouse Leaf, che richiama appunto, nel suo elegante design, la forma di una foglia è un progetto veramente innovativo su cui stanno lavorando i progettisti Zhang Lu e Hairong Xuehui. Questo nuovo mouse wireless potrà infatti ricaricare le batterie durante il suo utilizzo, proprio in funzione dei suoi movimenti, sfruttando l’energia cinetica da lui stesso prodotta.
Leaf: Ecco Come un Mouse Wireless Si Ricarica le Batterie
Le tastiere e i mouse wireless sono di sicura comodità, anche se io sono rimasta fedelmente ancorata alla tecnologia con i fili, ma non c’è ombra di dubbio che questo tipo di dispositivi possano essere migliorati ulteriormente. Ho avuto qualche esperienza con i mouse wireless qualche tempo fa, le batterie duravano qualche settimana e per evitare sprechi e danni ambientali, mi ero affidata alle batterie ricaricabili senza particolari fastidi.
Basta averne un paio di coppie da scambiare ogni volta che una si scarica e il gioco è fatto, ma ho sempre pensato che sarebbe una perfetta opportunità poter ricaricare le batterie del mouse durante il suo utilizzo così da non doverci pensare ogni volta.
Il medesimo pensiero l’hanno avuto i progettisti Zhang Lu e Hairong Xuehui, i quali hanno iniziato a lavorare ad un nuovo concetto di mouse, chiamato Leaf (Foglia), che si basa sul concetto che il nostro mouse wireless si scarica ogni volta che viene mosso, quindi la soluzione è sfruttare la sua stessa energia cinetica per ricaricare le batterie.

In questo momento il mouse Leaf è ancora solo un progetto, ma se verrà sviluppato e reso reale sarebbe un’innovazione sicuramente molto importante per tutta la tecnologia, sia in funzione della sua comodità per l’utente, sia in funzione della riduzione enorme che una rivoluzione di questo tipo può avere sull’impatto ambientale. Duracell ringrazia.
Dal punto di vista dell’utente il mouse funziona esattamente come una qualsiasi periferica wireless, cioè attraverso un controller USB da collegare al pc come è tutt’ora, ma al posto del vano batterie il mouse avrà al suo interno una serie di circuiti e dispositivi attraverso i quali gli sarà possibile auto-ricaricarsi attraverso il suo stesso movimento.

Visivamente e teoricamente è spettacolare, dobbiamo ora solo attendere di sapere se sarà effettivamente realizzabile e se il prezzo sarà ragionevole.
Link | GeekyGadgets
© 2008 Ziogeek.com
Tag: mouse wireless
Tutti i social contro Google: “Don’t be Evil”
![]()
Dopo le ultime diatribe e i vari botta e risposta a distanza tra Google e Twitter, riguardanti la politica di Google che ha integrato Google+ sui propri risultati di ricerca, arriva finalmente una mossa concreta da parte di tutti i maggiori social network avversari che prende il nome di “Don’t Be Evil”.
La mossa ideata dai social è un plug-in installabile nei maggiori browser, ed è disponibile gratuitamente nel portale “Focus on the User”, questo strumento consentirà di avere dei risultati di ricerca maggiormente utili e meno influenzati da Google.
Infatti per quanto riguarda le aziende che si sono unite alla protesta i risultati di ricerca sono ormai falsati e più a favore degli interessi di Google che non di quelli degli utenti che navigano; il messaggio lanciato dagli avversari di Google è duplice “don’t be evil”, “Focus on the user”. Con quei due messaggi si vuol dire che bisogna focalizzare l’attenzione sugli utenti e sulle loro esigenze, così da evitare che Google possa influenzare le scelte degli utenti a favore dei propri interessi.
Nella pratica installando il plug-in e andando a ricercare ad esempio dei nomi, avremo dei risultati meno falsati perché troverete i vari twett, post facebook e profili nei vari social network del nome ricercato, mentre senza il plug-in avreste trovato subito solo il profilo Google+ del contatto e altri risultati importanti sarebbero scesi più in fondo dove fossero stati meno visibili.
Le aziende aderenti a questa iniziativa sono: Facebook, LinkedIn, MySpace, Flickr e molti altri, ora Google si trova sola contro tutti a dover affrontare questa lotta, che da come è stata intrapresa potrebbe anche stuzzicare le indagini dell’Antitrust verso i nuovi metodi applicati da Google, voi cosa ne pensate?
Link | Focusontheuser.org
© 2008 Ziogeek.com
Tag: facebook, Google, social network, twitter
Creare siti in PHP – (30) – Le espressioni regolari

Siamo arrivati all’ultima puntata di questa guida base al linguaggio PHP, e per concludere affrontiamo oggi un argomento di sicuro non semplice ma che cercheremo di trattare in modo tale da fornire alcuni strumenti utili per la sua comprensione: stiamo parlando delle espressioni regolari. In una sola puntata non riusciremo a trattare l’argomento in modo completo al 100% ma con le nozioni che avremo alla fine potremo eseguire diverse operazioni.
Le espressioni regolari
Per iniziare possiamo dire che cosa sono e a che cosa servono le espressioni regolari. Si tratta di particolari costrutti che si usano per verificare se all’interno di una stringa (e quando in PHP si parla di stringa si intende anche un testo lungo e complesso) è presente una certa sottostringa. Potreste pensare che in realtà non ci sono novità perché abbiamo già visto, nella puntata dedicata alle funzioni sulle stringhe, come cercare e sostituire sottostringhe. In realtà le espressioni regolari sono uno strumento molto più potente perché non definiscono semplici sottostringhe ma, data la loro natura versatile, con un solo pattern (una sequenza di caratteri) possiamo cercare una grande varietà di sottostringhe.
Le espressioni regolari possono essere utili per moltissime situazioni: per esempio, nella puntata in cui parlavamo dei form abbiamo fatto un cenno alle espressioni regolari perché abbiamo detto che servono per controllare se l’utente inserisce un indirizzo email corretto. Questo infatti potrebbe essere un utilizzo, ma potremmo usare le espressioni regolari per altre operazioni, per esempio controllare se un dominio è stato scritto correttamente, evidenziare una certa occorrenza o un insieme di occorrenze in un testo, cercare tutte le etichette HTML presenti in un testo, sostituire doppi apici con virgolette, controllare la complessità di una password e via dicendo.
I metacaratteri
Entriamo subito nell’argomento e iniziamo a parlare di “metacaratteri”, ovvero di caratteri speciali inseriti all’interno di una espressione regolare e che sono dotati di un significato ben preciso. Per esempio la sequenza [a-z] indica “qualsiasi lettera minuscola compresa tra la a e la z”. Se volessimo invece trovare tutte le lettere non solo minuscole ma anche maiuscole dovremmo scrivere un’espressione come questa: [a-zA-Z]. Avrete quindi intuito che le parentesi quadre racchiudono un insieme di caratteri. Vediamo quali sono i metacaratteri:
| [] (parentesi quadre) | Contengono una sequenza di caratteri |
| () (parentesi tonde) | Contengono una precisa sottostringa |
| . (punto) | Qualsiasi carattere |
| ^ (accento circonflesso) | Inizio di stringa o negazione |
| $ (dollaro) | Fine della stringa |
| | (pipe) | Operatore disgiuntivo OR |
| \ (backslash) | Carattere di escape |
I quantificatori
Esistono poi i quantificatori, che indicano quante volte bisogna cercare un’occorrenza all’interno della nostra stringa principale:
| * (asterisco) | Zero o più occorrenze |
| ? (punto interrogativo) | Zero o una occorrenza |
| + (più) | Una o più occorrenze |
| {} (parentesi graffe) | Contengono il numero che rappresenta la ripetizione di un’occorrenza. |
Alcuni esempi…
Facciamo alcuni esempi per comprendere meglio:
| [a-zA-Zàèéìòù0-9] | Tutti i caratteri minuscoli e maiuscoli, le lettere accentate e i numeri |
| [^0-9] | Un qualsiasi carattere che non sia un numero |
| (ciao) | La sottostringa “ciao” |
| t?o | La lettera o preceduta da 0 o 1 occorrenze della lettera t (se il testo è “gatto, canto, albero” ci saranno tre risultati utili e cioè la sequenza “to” di gatto, la sequenza “to” di canto e la “o” di albero) |
| t*o | La lettera o preceduta da 0 o più occorrenze della lettera t (per il testo precedente ci saranno tre risultati utili e cioè “tto” di gatto, “to” di canto e “o” di albero) |
| t+o | La lettera o preceduta da 1 o più occorrenze della lettera t (due risultati utili, “tto” di gatto e “to” di canto) |
| t{2}o | La lettera o preceduta da 2 occorrenze della lettera t (un risultato, “tto” di gatto) |
| t{3,5}o | La lettera o preceduta da un minimo di 3 fino a un massimo di 5 occorrenze della lettera t (nessun risultato) |
| [^t]t{1}o | Un’occorrenza della lettera t seguita dalla lettera o e preceduta da qualsiasi carattere purché non sia una t (un risultato, “to” di canto) |
| [a-s](to) | Qualsiasi carattere compreso tra a e s seguito dalla sottostringa “to” (un solo risultato, “to” di canto). |
| (2\+2) | La stringa “2+2” |
| .$ | Qualsiasi carattere purché sia l’ultimo della stringa |
| (to)|(ro) | La sottostringa “to” o la sottostringa “ro” (tre risultati: “to” di gatto, “to” di canto e “ro” di albero |
… e altri esempi, più pratici
E così via. A questo punto abbiamo quindi gli strumenti per creare dei pattern utili… partiamo dall’esempio più semplice, ovvero un pattern per validare una partita IVA che come tutti sappiamo è composta da undici numeri:
^[0-9]{11}$
Non facciamo altro che creare una sequenza [0-9] che indica un qualsiasi numero, e la facciamo seguire subito dalla sequenza {11} che indica che il numero deve obbligatoriamente occorrere undici volte. L’accento circonflesso e il dollaro indicano ovviamente l’inizio e la fine della stringa. Se omettessimo uno dei due, avremmo vanificato il controllo in quanto potremmo inserire un qualsiasi numero prima o dopo la nostra partita IVA e il pattern verrebbe comunque validato perché il nostro script non saprebbe da dove inizia o dove finisce la stringa.
Possiamo poi creare un pattern che controlli che un dato file sia un’immagine:
^.+\.(jpeg|jpg|png|gif)$
Abbiamo qui il punto che indica una qualsiasi sequenza di caratteri, seguito da un “vero” punto (per essere considerato tale, deve essere preceduto dal carattere di escape) e quindi dalle estensioni tipiche delle immagini “da web” (jpeg, jpg, png, gif) tra parentesi tonde e separate tra di loro per mezzo dell’operatore disgiuntivo.
Prendiamo poi, per esempio, un controllo per validare una data:
^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{4}$
In questo caso non facciamo altro che creare tre sequenze [0-9] rispettivamente per i giorni, i mesi e gli anni: nei primi due casi il numero può comparire da un minimo di una a un massimo di due volte e deve essere seguito da un punto (con cui separiamo i numeri della data… gusti personali) a sua volta preceduto da un backslash. Per quanto riguarda l’anno invece il numero deve essere obbligatoriamente presente quattro volte.
Più complesso invece è il pattern per validare un indirizzo email:
^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9_\.\-]+\.[a-z]{2,6}$
Nella prima sequenza tra parentesi quadre inseriamo tutti i caratteri alfanumerici insieme all’underscore, al punto e al trattino e indichiamo che possono ricorrere una o più volte attraverso l’uso del segno +, a fui facciamo seguire la chiocciola. Questa prima sequenza rappresenta il nome utente dell’indirizzo. Dopo la chiocciola inseriamo un’altra sequenza tra parentesi quadre simile alla prima e poi inseriamo il punto preceduto dal carattere di escape. Abbiamo quindi il nome del dominio, a cui facciamo seguire l’espressione [a-z] che può ricorrere da un minimo di 2 fino a un massimo di 6 volte: è nient’altro che l’estensione del dominio.
Le classi di caratteri
Per alcune delle espressioni che abbiamo utilizzato esistono poi le cosiddette “classi di caratteri”, ovvero caratteri che corrispondono a precise sequenze e che possono accorciare molto il nostro lavoro. Vediamone alcune:
| \w | Corrisponde a [a-zA-Z0-9_] |
| \W | Corrisponde a [^a-zA-Z0-9_] |
| \d | Corrisponde a [0-9] |
| \D | Corrisponde a [^0-9] |
| \s | Cerca gli spazi |
| \S | Cerca tutto ciò che non sia uno spazio |
| [:alnum:] | Corrisponde a [a-zA-Z0-9] |
| [:alpha:] | Corrisponde a [a-zA-Z] |
| [:lower:] | Corrisponde a [a-z] |
| [:upper:] | Corrisponde a [A-Z] |
| [:punct:] | Cerca i caratteri di punteggiatura |
Negli ultimi cinque casi, le parentesi quadre sono parte integrante della sequenza, quindi se vogliamo cercare i i segni di interpunzione nella nostra stringa il pattern dovrà essere strutturato in questo modo:
[[:punct:]]
Con le classi di caratteri, le stringhe per la validazione di partite IVA e indirizzi email, tanto per prendere due degli esempi che abbiamo fatto in precedenza, potrebbero diventare una cosa di questo tipo:
^\d{11}$
^\S+@[\w.-]+\.[a-z]{2,6}$
Espressioni regolari e PHP: preg_match e preg_replace
Ma come fare per eseguire il controllo nel nostro script PHP? Abbiamo bisogno di una funzione, preg_match, che riceve come parametri il pattern e la stringa da controllare e nel caso in cui nel testo ci sia almeno una coincidenza con il pattern, la funzione restituirà come risultato 1 (true), e in caso contrario il risultato sarà 0 (false).
Per esempio, poniamo il caso di uno script che controlla se un utente, attraverso un form, ha caricato un’immagine con estensione corretta (il nome dell’immagine sarà stato precedentemente memorizzato in una variabile $immagine).
if (preg_match('/^.+\.(jpeg|jpg|png|gif)$/', $immagine)) {
echo "Grazie per aver caricato l'immagine!";
}
else {
echo "L'immagine ha un'estensione non valida";
}
I due slash inseriti dopo gli apici del primo parametro della funzione sono i delimitatori: se non inseriti, lo script restituirà un errore. Il meccanismo della funzione è molto semplice: il blocco if controlla che il risultato sia true e in caso affermativo stampa la scritta “Grazie per aver caricato l’immagine!”, mentre in caso contrario la scritta mostrata all’utente sarà “L’immagine ha un’estensione non valida”.
La funzione può essere usata anche, ovviamente, nel modo inverso, al negativo, facendo precedere la funzione dal punto esclamativo che indica negazione:
if (!preg_match('/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9_\.\-]+\.[a-z]{2,6}$/', $indirizzoemail)) {
echo "Indirizzo email non valido";
}
else {
echo "Indirizzo email valido!";
}
In questo caso abbiamo controllato un indirizzo email. La documentazione ufficiale della funzione preg_match si può trovare all’indirizzo http://php.net/manual/en/function.preg-match.php.
Abbiamo detto poi che attraverso le espressioni regolari possiamo poi anche fare sostituzioni all’interno di un testo. Questa operazione si può eseguire attraverso l’utilizzo della funzione preg_replace che riceve tre parametri: l’espressione regolare che definisce le sequenze da sostituire, la sottostringa sostituta e la stringa all’interno della quale compiere la sostituzione. Con un esempio banale:
$testo = "Cane, gatto, topo, cavallo, pecora, mucca";
echo preg_replace ("/[aeiou]/", "*", $testo);
Attraverso l’utilizzo della funzione preg_replace (il cui risultato sarà direttamente stampato attraverso echo) cerchiamo nella stringa $testo tutte le volte in cui occorre una vocale tramite la sequenza [aeiou], e sostituiamo ogni vocale con un asterisco. Questa funzione si presta a diversi utilizzi… per esempio, stiamo costruendo un blog e vogliamo censurare le parolacce dei nostri commentatori (farò un esempio… senza parolacce ma che funziona allo stesso modo).
$testo = "Il gatto mangia il topo";
echo preg_replace ("/(gatto|topo)/", "***", $testo);
In questo caso la parola “gatto” e la parola “topo” vengono sostituite dalla sequenza ***. Possiamo poi adoperare la funzione anche per sostituire etichette HTML:
$testo = "<strong>Ciao</strong>!!!!!";
$testo = preg_replace("/(<strong>)/", "<em>", $testo);
echo preg_replace("/(<\/strong>)/", "</em>", $testo);
In questo caso sostituiamo tutte le parole marcate in grassetto con parole marcate in corsivo. Questi non sono che alcuni esempi, e la versatilità delle espressioni regolari dà modo a ognuno di sfruttarle al meglio per le proprie esigenze. Per chiunque fosse interessato all’argomento, consiglio di approfondire facendo una ricerca sul web: si trovano davvero molti siti che sapranno spiegare meglio di me e in modo più completo l’utilizzo di questo affascinante strumento.
Ciao a tutti!!!
Benissimo, con la puntata di oggi termina anche la nostra guida di base al linguaggio PHP!
Mi auguro che la guida sia stata di vostro gradimento, che possa essere stata utile per imparare qualcosa di nuovo o per ripassare e che possa in generale dare un piccolo aiuto a chiunque voglia cimentarsi con PHP. Ringrazio Laura per avermi fornito questo spazio e ovviamente un grazie a tutti quelli che mi hanno seguito fino a questo punto, a quelli che hanno seguito anche poche puntate, a chi si è collegato una volta sola e a tutti coloro che hanno commentato e hanno tentato di risolvere gli esercizi
Un grande saluto!!!!!!!
My Homepage: Pagina Principale Quando Si Apre Una Nuova Scheda In Firefox

Gli utenti di oggigiorno si sono allontanati dall’antico Internet Explorer che prima era quasi l’unico browser ad essere sfruttato. Oggi le persone fanno affidamento su altri programmi per navigare che riescono a soddisfare maggiormente le loro necessità, come ad esempio la velocità. I maggiori software sfruttati dagli utenti sono soprattutto Mozilla Firefox e Google Chrome. Fra questi due programmi c’è una vera e propria lotta, ma la volpe di fuoco ultimamente sta venendo schiacciata dalla pallina di casa Mountain View.
Chrome, difatti, riesce a toccare le giuste corde dei navigatori. Prendiamo in considerazione la pagina che si apre quando si avvia una nuova scheda web nel browser: mentre in Chrome esce una comoda pagina che mostra i siti più visitati o le applicazioni, in Firefox non compare assolutamente nulla. Su Mozilla, difatti, si apre una schermata bianca che attenderà l’immissione di un nuovo indirizzo da raggiungere. Nulla di sconcertante, ovviamente, ma per molti è abbastanza scomodo.
New Tab e la pagina iniziale si avvia!
Vorresti che all’apertura di una nuova scheda su Firefox venisse aperta la pagina principale? In questo caso, potrete installare un’utile estensione che vi consentirà di realizzare questo desiderio. Stiamo parlando di My Homepage, scaricabile dallo spazio riservato agli addons di Mozilla. Il plug-in non farà nulla di eccezionale, ma vi consentirà di dire finalmente addio all’inutile pagine bianca che compare ogni volta che avviate una nuova scheda.

Dopo averlo installato, in seguito al riavvio del browser di Firefox, non dovrete far altro che lanciare una nuova scheda e vedere la vostra pagina principale apparire. Dopo pochi istanti vi sembrerà che la nuova funzione ci sia sempre stata, perché effettivamente dovrebbe essere proprio così, o almeno la pagina bianca dovrebbe contenere qualcosa di utile!
Con My Homepage potrete colmare una piccola mancanza di Mozilla Firefox e godervi comodamente il vostro adorato browser.
Link | My Homepage
© 2008 Ziogeek.com
Tag: estensioni Mozilla Firefox, My Homepage, nuova scheda firefox, pagina iniziale scheda Firefox
Apple Derisa Da Samsung In Un Nuovo Spot: Samsung Galaxy S II vs iPhone

Possedete un dispositivo iOS o uno che sfrutta il sistema operativo Android? Quelli che tifano per il primo, ovviamente, cercano di acquistare l’iPhone per effettuare le proprie chiamate, chi invece vuole affidarsi al robottino verde solitamente punta alla casa coreana che sta ottenendo uno strepitoso successo. La guerra è totalmente aperta e le aziende si sfidano quotidianamente. Solitamente Cupertino trascina la Samsung in tribunale accusandola costantemente di copiare i suoi device. Ultimamente l’azienda della mela ha addirittura fornito alcuni consigli all’avversaria. Suggerimenti assolutamente assurdi, secondo la maggior parte delle persone. Ricordiamo, infatti, che la Apple ha consigliato alla casa coreana di non utilizzare il colore nero nei suoi device, di evitare la forma squadrata, profili troppo sottili e altri piccoli accorgimenti. Insomma, ha suggerito di realizzare qualcosa di irrealizzabile o quasi.
La Samsung, intanto, continua a fare ciò che vuole e affronta le tante cause in cui Apple la coinvolge, ma l’azienda che odia la mela si prende delle piccole “rivincite” nei suoi spot. Non è la prima volta che Samsung si diverte a deridere la Apple durante una delle sue pubblicità, soprattutto prende in considerazione gli utenti che si accampano fuori dagli Apple Store per attendere il lancio ufficiale del nuovo terminale della di Cupertino.
Nuova pubblicità contro l’iPhone

Nello spot che sarà trasmesso durante il il 46° Superbown, il 4 febbraio, Samsung lancia un’ennesima frecciatina all’avversario. La pubblicità riprende, ancora una volta, gli appassionati della Apple che aspettano fuori dal negozio melato, addirittura pronti a passare la notte fuori lo store (pura realtà).
Mentre gli utenti melati attendono infreddoliti dietro delle transenne, arriva un ragazzo che mostra un Samsung Galaxy S II nelle sue mani. Quest’ultimo dispositivo è dotato del navigatore integrato, quindi gratuito, turn-by-turn. Il leader dei fan della Apple, inoltre, afferma ”Oh, We just got Samsunged” una sorta di “Oh, siamo appena stati Samsugizzati” e, fattore importante, appare quasi in gabbia dietro delle sbarre come se fosse in trappola: netto riferimento al sistema operativo melato.
© 2008 Ziogeek.com
Tag: Apple derisa, pubblicità Samsung, samsung vs apple, Samsunged, spot Samsung
Creare siti in PHP – (29) – La sicurezza in PHP: session hijacking

Terminiamo oggi la breve panoramica sui più comuni problemi di sicurezza con una puntata sul session hijacking, che consiste nel “furto dell’identità” di un utente che si collega a un sito web.
Session hijacking: che cos’è
Che cosa fa il malintenzionato che sottopone l’utente di un sito a session hijacking? Non fa altro che rubare l’identificativo di sessione dell’utente (ogni sessione ha un proprio id) per poi loggarsi al sito spacciandosi per l’utente a cui ha rubato le credenziali. Uno dei metodi più comuni per rubare le credenziali è sfruttare il cross-site scripting: abbiamo però già parlato nell’episodio precedente di come difenderci da questo tipo di attacchi, quindi vedremo oggi come coprirci anche da un furto ottenuto tramite “session fixation”: con la session fixation, i dati verranno rubati tramite una sessione creata ad hoc dal malintenzionato.
Certo, affinché si verifichi una session fixation devono essere soddisfatte due condizioni: codice vulnerabile e utente sprovveduto. Nella puntata sulle sessioni non abbiamo parlato del modo in cui l’id di sessione viene propagato: ciò può avvenire tramite un cookie che viene appositamente creato per contenere l’id (cookie che si estinguerà alla chiusura del browser) oppure, nel caso in cui i cookie siano stati disabilitati, tramite metodi get e post. Il ladro di sessioni può convincere l’utente del nostro sito (magari tramite una mail o con un post su un blog) a collegarsi a un indirizzo simile a questo: www.nostrosito.it/login.php?PHPSESSID=12345 dove, attraverso la query string e ipotizzando che l’id di sessione venga propagato tramite get, decide il numero di sessione.
Simuliamo un attacco
Per comprendere meglio il meccanismo di un attacco session fixation proviamo a simularne uno (ma, come detto nella scorsa puntata, solo affinché vi possiate difendere). Per prima cosa assicuriamoci che nelle impostazioni del nostro PHP sia abilitata la trasmissione dei dati di sessione attraverso url: clicchiamo quindi sull’icona di Wamp, andiamo sotto la voce PHP e quindi apriamo il file php.ini. Cerchiamo adesso la direttiva session.use_trans_sid, che è quella che consente la tramissione degli id di sessione via url (a proposito: i commenti sopra di essa vi diranno che abilitarla sottopone a rischi di sicurezza). Se è a 1 lasciamola com’è, altrimenti se è impostata a 0 dobbiamo settarla a 1. Cerchiamo poi la direttiva session.use_only_cookies (permette la trasmissione degli id di sessione solo tramite cookie) e impostiamola a 0.
A questo punto creiamo un semplice codice PHP che al nostro collegamento dà inizio a una sessione che memorizza il numero di volte in cui visualizziamo la pagina con il nostro browser:
<?php
session_start();
if (!isset($_SESSION['conto'])) {
$_SESSION['conto'] = 0;
} else {
$_SESSION['conto']++;
}
echo "Numero:" . $_SESSION['conto']."";
?>
Tutto molto semplice. Con la solita funzione isset controlliamo che la variabile $_SESSION['conto'] non sia stata inizializzata: se non esiste, la creiamo e la impostiamo a 0, se invece esiste già la incrementiamo. Terminato il blocco if stampiamo la nostra variabile.
Salvate il file chiamandolo, per esempio, “fixation.php” e inseritelo in una cartella “prova” all’interno della cartella “www” di Wamp. A questo punto aprite il vostro browser preferito (per esempio Firefox), eliminate tutti i cookie di localhost e collegatevi a questo indirizzo: http://localhost/prova/fixation.php?PHPSESSID=12345. Aggiornate la pagina un qualsiasi numero di volte, arriviamo per esempio a 9.
A questo punto chiudete pure il browser. Riaprite un altro browser (esempio, Chrome), magari anche su un altro computer se fate la prova su un server remoto, e provate a collegarvi allo stesso indirizzo: come potrete notare il conto non ripartirà da 0 ma partirà da dove siete rimasti prima (nel nostro caso vedremo “10”). Cosa significa questo? Abbiamo simulato un ipotetico utente A che utilizza Firefox, apre la pagina con il link che gli è stato suggerito dal malintenzionato utente B e dà inizio a una sessione. L’utente B aprirà poi il suo Chrome con l’id di sessione da lui stesso creato e potrà accedere ai dati dell’utente A. In questo caso si tratta semplicemente del numero di volte che ha aggiornato la pagina, ma questo tipo di attacco funziona tranquillamente anche su script molto più complessi (per esempio un login a un sito web: il malintenzionato B potrà accedere indisturbato a tutti i dati personali dell’utente A) che però hanno seri problemi di sicurezza.
Come difendersi: session_regenerate_id
Come difendersi da questo attacco? Il metodo più semplice è rigenerare spesso l’id di sessione, in modo da rendere inefficaci gli attacchi: questo si può fare agevolmente tramite l’apposita funzione session_regenerate_id, che si applica in modo molto semplice:
session_regenerate_id();
E in genere va fatto dopo aver dato il via alla sessione con session_start. La documentazione ufficiale di questa funzione si trova all’indirizzo http://php.net/manual/en/function.session-regenerate-id.php. Inoltre sarebbe bene che le direttive di cui sopra, session.use_trans_sid e session.use_only_cookies, fossero impostate rispettivamente a 0 e 1. Comunque l’utilizzo di session_regenerate_id è di per sé già sufficiente per difendersi. È quindi bene rigenerare spesso, anche prima che l’utente abbia fatto login (inserendo quindi la funzione nella pagina di login, per esempio).
Come difendersi: controllo sullo user agent
Infine potremmo eseguire un controllo aggiuntivo sullo user agent dell’utente (perché niente impedisce che uno stesso id di sessione, come abbiamo visto, possa essere utilizzato da due utenti diversi): questo consente anche di avere una difesa contro attacchi di tipo “session sidejacking”. Attraverso questo tipo di attacco, comunque difficile da mettere in atto, il malintenzionato cerca di intercettare l’id di sessione attraverso i pacchetti di rete che vengono scambiati tra il server e il browser dell’utente. Per ovviare a questa minaccia può essere utile fare in modo che l’accesso venga impedito nel caso in cui lo user agent di chi richiede l’accesso al nostro sito non corrisponda a quello dell’utente che ha effettuato il login.
Per fare questo abbiamo bisogno della variabile superglobale $_SESSION: dovremo associare a essa il valore dell’elemento HTTP_USER_AGENT della variabile superglobale $_SERVER, meglio se codificato tramite funzione md5. Il tutto nella pagina o nella funzione che consente il login:
$_SESSION['HTTP_USER_AGENT'] = md5($_SERVER['HTTP_USER_AGENT']);
In questo modo abbiamo creato un elemento della sessione chiamato HTTP_USER_AGENT a cui abbiamo associato nient’altro che il nostro user agent criptato con md5. A questo punto, per eseguire il controllo, potremmo utilizzare un codice simile a questo:
if (isset($_SESSION['HTTP_USER_AGENT'])) {
if ($_SESSION['HTTP_USER_AGENT'] != md5($_SERVER['HTTP_USER_AGENT'])) {
logout();
}
}
Con questo script non facciamo altro che controllare, sempre tramite la funzione isset, se esiste la sessione con elemento “HTTP_USER_AGENT”: in caso affermativo, se il suo valore è diverso dallo user agent, sempre criptato con md5, dell’utente che sta eseguendo lo script (in altre parole se chi si è loggato ha uno user agent diverso rispetto a quello dell’utente che sta cercando di forzare l’accesso al sito), rimandiamo l’utente a una ipotetica funzione logout che distruggerà la sessione.
Anche per oggi la puntata è arrivata alla fine: vi do appuntamento alla prossima, la trentesima nonché ultima della nostra guida!
General Motors progetta i finestrini interattivi
![]()
General Motors ha presentato un progetto davvero futuristico basato sulla realtà aumentata, che se si realizzasse davvero rivoluzionerebbe radicalmente i viaggi in macchina, soprattutto per i passeggeri dei sedili posteriori. Il progetto è denominato Windows of Opportunity ed è realizzato in collaborazione con il team israeliano Bazalel Academy of Art and Design.
Con Windows of Opportunity i finestrini laterali si trasformano in display interattivi, utilizzabili dai passeggeri posteriori sfruttando alcune applicazione appositamente realizzate per lo svago e l’utilità.
Le applicazioni incluse nel prototipo per adesso sono quattro:
-
Otto, personaggio animato che proiettato su uno scenario molto simile a quello che circonda l’autovettura in termini di meteo e prestazioni, in pratica un semplice intrattenimento dedicato soprattutto ai bambini.
-
Foofu, un’applicazione che simula l’appannamento del vetro in modo da dare la possibilità di disegnarci tramite l’uso delle dita.
-
Spindow, consentirà di scegliere uno scenario alternativo da osservare, da scegliere tra vari scenari di città famose in un mappamondo o in alternativa di sbirciare nei finestrini altrui.
-
Pond, questa più orientata alla musica in streaming darà la possibilità di condividere i propri brani con le altra autovetture, scaricarli e inoltre inviare messaggi agli altri passeggeri.
Per adesso il progetto è stato realizzato dagli studenti di Bezalel Academy of Art and Design su un prototipo completo di sedile posteriore e del suo relativo finestrino laterale. Il finestrino in questione diventerebbe un vero e proprio pannello multitouch, con cui si interagirà tramite gesture.
Omer Tsimhoni di General Motors, ha commentato quanto segue:
Progetti come WOO hanno un valore inestimabile, perché lavorare con i designer e gli studenti non interni al settore automobilistico porta prospettive nuove ed innovative. WOO è solo uno dei molti progetti che GM sta sviluppando per reinventare l’esperienza dei passeggeri nei prossimi anni.
Ancora non è certo che questo progetto arriverà nelle auto in produzione, sicure sono però le intenzioni di General Motors di orientarsi su una rivoluzione dell’esperienza vivibile all’interno delle proprie autovetture, quindi questo futuro non sarà poi tanto lontano voi cosa ne pensate?
© 2008 Ziogeek.com
Tag: GM, realtà aumentata, touch
Primo Tablet LTE Presentato da LG: Compatibile con Reti 4G

LG ha presentato ufficialmente il suo tablet LTE, si chiama Optimus Pad LTE e la sua caratteristica principale che lo differenzia dagli altri è proprio la sua compatibilità con le omonime reti 4G, che lo dovrebbe rendere davvero eccezionale in termini di velocità di navigazione 4G.
Oltre alla compatibilità con le nuove reti questo tablet ha anche delle interessanti caratteristiche, all’altezza dei più grandi device di fascia alta; infatti LG Optimus Pad LTE monterà un processore dual core Qualcomm SnapDragon da 1.5 GHZ, insieme ad una memoria RAM da 1 GB e una capacità di storage interna basata su memoria Flash da 32 GB.
Primo Tablet LTE presentato da LG: Le Caratteristiche Tecniche
Il device di casa LG avrà un peso di 497 grammi e uno spessore di 9,34 mm, per scendere invece più nel dettaglio delle caratteristiche tecniche posso dirvi che:
- presenterà una fotocamere posteriore da 8 megapixel che registra filmati in FullHD,
- in aggiunta ci sarà anche una fotocamera frontale da 2 megapixel,
- per quanto riguarda la connettività supporterà anche il Wi-Fi, Bluetooth, 4G LTE, porte USB, HDMI e uno slot per microSD da max 32GB,
Inoltre il tablet ha il supporto alla tecnologia DLNA e una batteria da 6.800mAh che secondo le indicazioni di LG dovrebbe garantire un’autonomia massima di dieci ore. Non poche sono le perplessità per quanto riguarda il sistema operativo, infatti LG ha annunciato che monterà Android 3.2 Honeycomb, senza dare ulteriori notizie su una eventuale aggiornamento di versione alla 4.0 Ice Cream Sandwich, anche se si attendono altre delucidazioni.
La data di uscita e il prezzo sono ancora un mistero, anche se si pensa che presto si saprà di più; una certezza è che l’LG Optimus Pad LTE verrà lanciato inizialmente in Corea del Sud e successivamente in occidente.
Cosa ne pensate, sarà un degno rivale degli altri tablet di prima fascia?
HP VantagePoint: Il Mega Tablet della Hewlett-Packard

Hewlett-Packard ha svelato un suo importante ed innovativo progetto che riguarda lo sviluppo di un gigantesco Tablet Hewlwtt-Packard, di cui si vociferava, pensato per poter permettere l’interazione degli utenti con applicazioni, web, immagini e video su una superficie dalle dimensioni mai viste prima.
Il dispositivo prende il nome di HP VantagePoint, il gigantesco schermo viene composto da sei schermi HP LD4730G da 47 pollici l’uno, gli schermi sono poi disposti su un’intelaiatura meccanica da 3×2 che in totale raggiunge gli 11 piedi di larghezza e 7 di altezza (3,3 per 2,1 metri).
HP VantagePoint: Caratteristiche Tecniche
La risoluzione video di questo gigantesco display è 4098×1536 pixel, inoltre è comprensivo di funzione multitouch con ben 32 punti di contatto simultanei; davvero ben oltre il normale limite di tocchi di qualsiasi altro tablet presente sul mercato. Per quanto riguarda la diagonale del display si arrivano a misurare ben 132 pollici.
Tutti i contenuti che vengono riprodotti su questo schermo vengono elaborati da una workstation HP Z800, mentre viene utilizzato come telecomando, per il settaggio delle impostazioni su ognuno dei pannelli, un computer desktop HP Pavilion Slimline.
La parte software gira tutta su Windows 7, con specifiche applicazioni codificate in C++, JavaScript e Microsoft Presentation Framework.
I sei schermi sono protetti da uno strato di Corning Gorilla Glass, materiale conosciuto per la propria resistenza che ha la funzione di proteggere i pannelli da eventuali danni.
Questo sistema è anche adatto a lavori in zone con molta luminosità, quindi anche in luoghi ampi e luminosi, funzionalità che potrebbe essere molto ricercata da grandi aziende. Ovviamente questa tecnologia non è affatto alla portata di tutti, infatti l’intero kit ha un costo di 125.000 dollari.
Cosa ne pensate uno schermo del genere interesserà veramente a qualcuno? E’ questo il futuro della tecnologia? Lasciate la vostra opinione nei commenti.
© 2008 Ziogeek.com
Tag: Hewlett-Packard
Creare siti in PHP – (28) – La sicurezza in PHP: XSS e SQL Injection

Iniziamo oggi una breve panoramica su due dei problemi di sicurezza più comuni degli script PHP.
XSS: Cross-site scripting
Partiamo dal cosiddetto “Cross-site scripting”, noto anche come XSS: si tratta di un problema, molto diffuso, che riguarda la sicurezza dei form e in particolare i form che non applicano controlli sui campi. Il malintenzionato può, tramite il form, far eseguire un codice JavaScript che magari rimanda a un suo sito dove è contenuto uno script dannoso. A proposito: ricordo a tutti quelli che leggono (visti i numerosi accessi al sito) che alcune delle cose che sto per illustrare, se messe in pratica, costituiscono un reato penalmente perseguibile. Ve ne parlo solo affinché vi possiate difendere.
Tornando al nostro XSS, prendiamo un semplicissimo form per inserire un messaggio:
<form action="xss.php" method="get">
Nome:<br />
<input type="text" name="nome" /><br />
Messaggio: <br />
<textarea rows="10" cols="20" name="messaggio"></textarea><br />
<input type="submit" name="invia" value="Invia!" /><br />
</form>
E supponiamo che il codice della pagina xss.php sia strutturato in questo modo:
<?php
echo "Nome: {$_GET['nome']}";
echo "<br /><br />Messaggio: <br /><br />";
echo stripslashes($_GET['messaggio']);
?>
Bene, questo è un codice del tutto insicuro perché non ci sono controlli di sicurezza. Nel campo “messaggio” l’hacker può facilmente inserire un codice JavaScript di questo tipo:
<script language="text/javascript">document.location.href="http://www.web-magazine.it";</script>
Dove ovviamente al posto di web-magazine.it c’è un sito malvagio. Attraverso la stampa con echo, il codice viene inserito nella pagina xss.php e quindi eseguito. E ovviamente, date le tante cose che si possono fare con JavaScript, il reindirizzamento non è che una possibilità: il malintenzionato può infatti anche installare script dannosi direttamente all’interno del sito. E questo tipo di attacco funziona sia che il nostro form abbia metodo get, sia che abbia metodo post. Tipicamente, gli script XSS vengono utilizzati per rubare cookie ai malcapitati.
Come difendersi dal cross-site scripting
Difendersi da questo tipo di attacchi è veramente molto semplice: bisogna solo tenerlo a mente! Basterà fare in modo che i caratteri riservati del linguaggio HTML vengano sostituiti con le relative entità (per esempio la parentesi uncinata aperta con <) o che le etichette HTML vengano del tutto cancellate.
Per fare questo abbiamo tre funzioni: htmlspecialchars, htmlentities e strip_tags. Funzionano tutte allo stesso modo: ricevono come parametro la stringa per la quale dobbiamo sostituire i caratteri. Ecco quindi qual è il codice corretto e sicuro da utilizzare nella pagina xss.php:
<?php
echo "<br /><br />Messaggio: <br /><br />";
echo htmlspecialchars(stripslashes($_GET['messaggio']));
?>
Oppure
echo htmlentities(stripslashes($_GET['messaggio']));
O ancora
echo strip_tags(stripslashes($_GET['messaggio']));
htmlspecialchars, htmlentities e strip_tags
Ci sono ovviamente alcune differenze tra le tre funzioni. La differenza tra htmlspecialchars e htmlentities consiste nel fatto che la prima converte in entità solo i caratteri riservati di HTML, mentre la seconda converte anche i caratteri speciali (per esempio, se dovessimo scrivere in tedesco, la o con la dieresi – ö – sarebbe convertita in ö). La funzione strip_tags invece elimina del tutto le etichette HTML. In ogni caso, il codice immesso dal malintenzionato verrebbe stampato sullo schermo e non eseguito (anzi, nel caso di strip_tags le tag verrebbero del tutto eliminate). E ricordate sempre: uno dei migliori metodi per difendersi dagli attacchi è filtrare tutto ciò che arriva in input sul nostro sito. In questo caso abbiamo visto come filtrare attraverso le tre funzioni di cui abbiamo parlato: potete trovare le documentazioni ufficiali delle funzioni a queste pagine: http://www.php.net/manual/en/function.htmlspecialchars.php (htmlspecialchars), http://php.net/manual/en/function.htmlentities.php (htmlentities), http://it.php.net/manual/en/function.strip-tags.php (strip_tags).
SQL Injection
Il secondo problema di vulnerabilità che vediamo oggi è la cosiddetta SQL Injection (iniezione di SQL). Anche in questo caso l’attacco prende di mira form scritti male per eseguire un codice SQL malevolo, e adesso vedremo nel dettaglio in cosa consiste questa pratica e perché è tanto pericolosa. Prendiamo per esempio questo semplice form per connettersi a un sito:
<form action="login.php?step=2" method="post">
Nickname:<br />
<input type="text" name="nickname" /><br />
Password: <br />
<input type="password" name="psw" /><br />
<input type="submit" name="invia" value="Invia!" /><br />
</form>
In questo caso il nostro form, invece di rimandare a una nuova pagina, rimanda alla stessa ma con l’aggiunta della query string ?step=2, in modo da scrivere tutto nella stessa pagina. L’azione del form andrà quindi scritta in un blocco if di questo tipo:
if (isset($_GET['step']) && $_GET['step'] == 2) {
// azione
}
else {
}
Ipotizziamo anche che il gestore del sito o del blog sia stato così sprovveduto da aver fatto in modo che le password vengano inserite in chiaro nel database (quindi senza criptarle attraverso il form di registrazione). Ora prendiamo il pessimo script che esegue il controllo sui dati immessi dall’utente:
$query = "SELECT * FROM autori WHERE Nickname = '{$_POST['nickname']}' AND Password = '{$_POST['psw']}'";
$risultato = mysql_query($query);
if (mysql_num_rows($risultato) == '1') {
echo "Benvenuto, utente autenticato";
// codice che mostra l'eventuale pagina personale dell'utente
}
else {
echo "Spiacente, password errata";
}
Chiariamo subito la funzione nuova, mysql_num_rows: restituisce il numero dei record trovati dalla query (nel nostro caso uno, anche perché si suppone che gli username siano univoci) e riceve come parametro il risultato della query. Qua si trova la documentazione ufficiale della funzione: http://php.net/manual/en/function.mysql-num-rows.php. Pertanto se la funzione dà come risultato 1 (e quindi trova il record), l’utente sarà loggato, in caso contrario ci sarà un messaggio che informerà l’utente di aver inserito una password errata.
Questo codice è estremamente vulnerabile, soprattutto nel caso in cui l’impostazione magic quotes gpc di PHP sia disattivata: in locale potete controllarlo su WAMP cliccando sull’icona nella barra delle applicazioni, quindi andare alla voce PHP e ancora andare su Impostazioni PHP. Se la voce “magic quotes gpc” è spuntata significa che è attiva e avete maggiori protezioni contro le SQL Injection. Ci sono però tanti provider che non attivano le magic quotes sui loro server. Ma cosa sono le magic quotes? Si tratta di un processo che aggiunge in automatico i caratteri di escape alle stringhe, ma dobbiamo sapere che a partire dalla versione 5.3.0 di PHP, magic quotes è deprecato e nella versione 6 addirittura non c’è più.
Vediamo quindi cosa può fare il malintenzionato. Nella casella nickname può inserire il nome “Federico”, e fin qui niente di strano. Ma nella casella password può tranquillamente inserire questa stringa:
' OR Nickname='Federico
Così facendo, il nostro codice eseguirebbe questa query:
$query = "SELECT * FROM autori WHERE Nickname = 'Federico' AND Password =
'' OR Nickname='Federico'";
La clausola OR inserita dal malintenzionato vanificherà il controllo sulla password: questo perché la query strutturata in tal modo dice di selezionare tutti i record della tabella autori il cui nickname sia Federico e la cui password sia vuota oppure, in alternativa a quest’ultima clausola, il cui nickname sia Federico. Dal momento che la seconda clausola è soddisfatta il malintenzionato riuscirà a entrare agevolmente al posto di Federico all’interno del sito, spacciandosi per lui e magari rubando i suoi dati… o insomma facendo tutto ciò che di cattivo si può fare entrando nel profilo di un’altra persona.
Criptiamo la password con md5
La prima operazione da fare è criptare la password attraverso la funzione md5: nel database non dovrà essere inserita in chiaro ma andrà fatta passare attraverso questa funzione (in un’ipotetica query con comando INSERT INTO metteremo tra i VALUES ‘md5($_POST['password']‘). MD5 è un algoritmo crittografico di hashing che fu realizzato nel 1991 da Ronald Linn Rivest, un crittografo statunitense: l’algoritmo trasforma una stringa in un’altra stringa a 128 bit, e non è possibile risalire alla stringa originale (se non andando… a tentativi). La funzione md5 di PHP riceve come parametro semplicemente la stringa da criptare e la documentazione ufficiale si trova qui: http://it.php.net/manual/en/function.md5.php.
Questo è solo uno dei tanti modi per criptare una password: parliamo di questo perché è il più semplice da utilizzare, ma c’è chi usa anche sistemi più sofisticati. Il nostro codice pertanto dovrà presentarsi in questa forma:
$query = "SELECT * FROM autori WHERE Nickname = '{$_POST['nickname']}' AND Password = '". md5($_POST['psw']). "'";
Dove i punti che separano md5($_POST['psw']) dal resto del codice sono un modo per concatenare valori all’interno di una variabile (le virgole non funzionano).
In questo caso ci salviamo dal malintenzionato che immette i dati di cui sopra, ma siamo ancora vulnerabili. Questo perché l’hacker potrebbe scrivere nella casella del nickname questa stringa cattivissima:
Federico' --
E magari può anche lasciare in bianco il campo della password. In tal modo la query diventerebbe questa:
$query = "SELECT * FROM autori WHERE Nickname = 'Federico' -- AND Password =
''";
I due trattini nel linguaggio SQL indicano i commenti: pertanto tutto ciò che viene dopo i due trattini sarà ignorato. Capite quindi la pericolosità della cosa malgrado il controllo tramite algoritmo md5. Sarà un giochetto per il malintenzionato riuscire a entrare nel sito e magari carpire tutta la lista degli utenti registrati o a far di peggio: pensate se potesse entrare con l’account dell’amministratore.
Come difendersi dalla SQL injection
Qual è pertanto il modo più sicuro per difendersi da questo tipo di attacco? Non dovremo far altro che aggiungere una funzione per controllare i dati immessi dall’utente (ricordate… filtrare sempre tutto), e si tratta della funzione mysql_real_escape_string, che inserisce i giusti caratteri di escape prima dei caratteri “pericolosi”. Riceve come parametro semplicemente la stringa a cui aggiungere i parametri di escape. Quindi la nostra query dovrà assumere questa forma per evitare attacchi:
$query = "SELECT * FROM autori WHERE Nickname = '". mysql_real_escape_string($_POST['nickname']) ."' AND Password = '". mysql_real_escape_string($_POST['psw']). "'";
Riusciremo così a rendere inoffensivo l’attacco del malintenzionato, perché l’ultima stringa che abbiamo visto risulterà invece in questo modo:
$query = "SELECT * FROM autori WHERE Nickname = 'Federico\' -- AND Password = ''";
Questa funzione va utilizzata solo nel caso in cui magic quotes gpc sia disattivo. Per essere però del tutto sicuri utilizziamo la funzione get_magic_quotes_gpc, che controlla la configurazione delle magic quotes (non riceve alcunché come parametro), e inseriamola in un blocco if:
if(get_magic_quotes_gpc()) {
$query = "SELECT * FROM autori WHERE Nickname = '". $_POST['nickname'] ."' AND Password = '".
$_POST['psw']. "'";
}
else {
$query = "SELECT * FROM autori WHERE Nickname = '". mysql_real_escape_string($_POST['nickname']) ."'
AND Password = '". mysql_real_escape_string($_POST['psw']). "'";
}
Controlliamo con il ciclo che il processo magic quotes gpc sia attivo, e in caso affermativo creiamo la nostra query senza la funzione mysql_real_escape_string, e in caso contrario ovviamente la aggiungiamo. Trovate la documentazione ufficiale di queste due funzioni qui http://it.php.net/manual/en/function.mysql-real-escape-string.php (mysql_real_escape_string) e qui http://php.net/manual/en/function.get-magic-quotes-gpc.php (get_magic_quotes_gpc).
Vi aspetto come sempre alla prossima puntata!