Identificare il computer di un client http

Spesso crediamo che l’attivazione della modalità incognito o l’utilizzo di un browser differente siano sufficienti a proteggere l’identità di chi accede ad un sito.

Purtroppo è vero in alcuni casi, ma non in tutti. Leggi tutto “Identificare il computer di un client http”

STUN

STUN (Session Traversal Utilities for NAT) è una tecnologia descritta da RFC5389 per scoprire facilmente l’indirizzo privato di un host che si trova dietro ad un filtro NAT.

Un server STUN ha lo scopo di enumerare tutti gli indirizzi privati o pubblici di un host e di permettere ad altri software di utilizzare quell’informazione.  Leggi tutto “STUN”

Programmare con la rete

Fino a pochi giorni fa non mi ero reso conto di quanto internet potesse essere utile anche come supporto alla programmazione.
Tutti noi sappiamo che una ricerca su internet spesso è in grado di risolvere in maniera semplice e veloce un problema che affligge il nostro codice, magari da ore: senza reinventare la ruota tutte le volte — o per evitare di spaccarsi la testa su un problema (anche banale) già incontrato mille volte — è sufficiente quasi sempre fare una ricerca su internet e leggere un post su siti come l’ottimo Stack Overflow .
Quello che io personalmente non avevo ancora realizzato è quanto utile possano essere i siti che permettono il sandboxing del codice e il test immediato: voglio parlarvi di due di questi siti che ho iniziato a usare recentemente, nella speranza che siano utili anche a voi.

Non programmo sul web in maniera professionale, si tratta di poco di più di un hobby: quando ho iniziato mi sono rivolto verso ASP.net in maniera abbastanza naturale per poter riciclare le mie competenze in Visual Basic e C♯. Solo dopo un po’ di pratica mi sono reso conto che non avrei potuto prescindere dall’uso di JavaScript per applicazioni client-side versatili e molto pratiche da usare in un sito web.
JS può essere scritto direttamente all’interno di una delle edizioni di Visual Studio, oppure con l’apposito modulo nel IDE open source Eclipse, ma entrambi i prodotti mi danno l’idea di un cannone con cui sparare alla proverbiale zanzara; almeno per quanto concerne il mio caso di applicazioni modeste in lunghezza e complessità.

Uno strumento estremamente più utile e immediato l’ho invece trovato online: si tratta di JSFiddle un tool in cui si può direttamente editare il markup HTML, il codice Javascript e gli stili CSS e vedere immediatamente il risultato nella finestra del browser. Si tratta di un progetto un po’ più recente e meno famoso di JSBin, ma che io trovo più user-firendly.
Con questo strumento si possono salvare i frammenti di codice e condividerli. I vantaggi sono evidenti: è possible pubblicare un semplice permalink non solo al codice, ma a un esempio immediatamente eseguibile e funzionate, tutto questo su Twitter, Faceboook su blog, forum e via dicendo.
E’ uno strumento non solo utile al programmatore per farsi aiutare più semplicemente o per mettersi un po’ in mostra, ma anche alla comunità in generale in quanto consente di condividere codice e conoscenza in maniera veloce e completa. Leggi tutto “Programmare con la rete”

La bella idea del localStorage

Frutta secca / Dried fruitIn principio erano i cookie: qualcuno aveva avuto l’idea di permettere al server di salvare dei dati in locale sul browser.

A parte qualche correzione di rotta per evitare problemi di sicurezza, i cookie sono sempre rimasti relativamente innocui dal punto di vista dello spazio occupato, in quanto sono limitati a 4096 byte: hai voglia a riempire una partizione utente a botte di file di 4k…

Con HTML5 qualcuno ha pensato di aggiungere il Web Storage a JavaScript per la gestione di una serie di coppie chiave-valore da registrare lato client. Anche le analisi delle possibili implicazioni di sicurezza fatte dal W3C non prendono in considerazione la possibilità che venga riempito lo spazio libero di una partizione.

Questo perché i browser applicano dei limiti allo spazio allocabile da ciascun dominio: 2,5 Mb per Chrome, 5 Mb per Firefox e Opera e 10 Mb per Internet Explorer.

Leggi tutto “La bella idea del localStorage”

La complessità del malware

È stata percorsa molta strada dal primo worm di sendmail, dai primi virus o dai primi spyware.

Come illustrato da Mikko Hypponen, adesso il malware viene scritto essenzialmente per tre ragioni: danaro, attivismo politico e attacchi tra Stati.

VRT ha pubblicato un’interessantissima analisi di un malware ben nidificato. Si tratta di un exploit che sfrutta un integer overflow per eseguire del codice arbitrario utilizzando un’immagine TIFF creata ad arte codificata base64, che viene creata al momento da un codice JavaScript hex encoded in altro codice JavaScript che è incorporato in un XML compresso a sua volta all’interno di un file PDF.

Ci si potrebbe chiedere come mai sia lecito incorporare codice JavaScript in un XML a sua volta incorporato in un formato di definizione della pagina. Purtroppo il formato PDF è nato come un’idea di Adobe di rendere ubiquo il PostScript, ma ha raccolto a bordo negli anni ogni tipo di contenuto. Un’idea, che poteva sembrare interessante ad alcuni, si è rivelata una pericolosa breccia nella sicurezza di moltissimi computer grazie a visualizzatori scritti non esattamente con la sicurezza come luce guida.

Questo è il motivo per cui molti enti della nostra Pubblica Amministrazione accettano che vengano caricati solamente PDF/A.

Questo piccolo esempio dimostra che il malware si può annidare in ogni tipo di file il cui sistema di visualizzazione è prono ad attacchi o contiene vulnerabilità. È, quindi, sempre opportuno aggiornare i vari programmi di visualizzazione e i sistemi antivirus perché i disagi teorici che potrebbero conseguire da un aggiornamento di versione sono sicuramente inferiori ai problemi concreti che derivano da un visualizzatore di cui sono note le vulnerabilità.

Internet Explorer vi osserva

Pianista / Pianistspider.io ha scoperto una feature di Internet Explorer dalla versione 6 alla versione 10 che permette di tracciare i movimenti del mouse.

Con un semplice programma JavaScript è possibile sapere la posizione del mouse sullo schermo, anche se questo si trova al di fuori della finestra di Explorer o se il programma è ridotto a icona.

La feature potrebbe sembrare utile o innocua, ma bisogna considerare che alcuni sistemi di sicurezza, come Kaspersky, o la funzione integrata della tastiera virtuale di Windows vengono suggeriti come metodi per evitare che i keylogger riescano a carpire le password o altri dati sensibili.

Questi metodi potrebbero essere vanificati da alcune righe JavaScript che si possono vedere in azione qui (ovviamente funziona solo con Internet Explorer).

Contattata da spider.io, Microsoft ha risposto che non ritiene opportuno sistemare il problema. (via Naked Security)

Countdown personalizzato

Come sviluppatore ho una decisa avversione verso il sistema di computo del tempo attualmente in uso.

Utilizzare cicli nidificati con periodi variabili da 7 a 24 a [28,29,30,31] a [59,60,61] a [365,366] unità per contare la medesima cosa non è esattamente quello che fa felice un programmatore. Se poi si aggiunge un lunedì festivo che va innanzi e indietro nel calendario a seconda (letteralmente) di come gli gira la luna, abbiamo completato il teatrino.

Nonostante i linguaggi attuali abbiano ricche funzioni di libreria per limitare i danni di questo metodo di computo del tempo figlio di tradizioni antiche mai cambiate, c’è ancora qualcuno che ne cade vittima:

Come tutti sappiamo che 19 Zellini fanno una Falce e che 17 Falci fanno un Galeone, sappiamo anche che 24 ore fanno un giorno, quindi il conto alla rovescia di cui sopra dovrebbe essere scritto (magari con un font più leggibile) -5g 3h eccetera.

Leggi tutto “Countdown personalizzato”

Sintesi vocale in 1K di JavaScript

Mathieu ‘P01’ Henri ha realizzato un programma di sintesi vocale in meno di 1024 byte di sorgente JavaScript.

Ovviamente l’output non ha la profondità della voce di HAL 9000 e i fonemi che il programma riesce a sintetizzare sono limitati, ma il risultato è intrigante se confrontato con la dimensione del codice.

Si può provare il risultato su questa pagina, scrivere il testo da leggere al posto di quello che appare; il sorgente è qui. (via BoingBoing)

Tetяis in 140 caratteri

        function(a,b,c,d,e){return d+=c,
        e=a|b<<d,d<0|a&b<<d&&(a=e=
        parseInt((a|b<<c).toString(d=32)
        .replace(/v/,""),d),b=new Date%2?1:3),
        [a,b,d,e]}

Questa funzione JavaScript di 140 caratteri scritta da Martin Kleppe è un piccolo Tetris giocabile.

Il codice è disponibile in versione commentata per poter capire cosa c’è dietro quei 140 byte.

Questo progetto fa parte di 140byt.es, un sito che promuove la creazione di frammenti JavaScript funzionanti che possono stare in un twit. (via Slashdot)

MOS 6502 visuale

Greg James, Barry Silverman e Brian Silverman hanno creato una simulazione visuale del funzionamento del celebre MOS 6502, cuore di molti computer storici tra i quali Apple ][, Vic 20, Commodore 64, Atari 2600 e Atari 800.

La simulazione in JavaScript è in grado di girare sulla maggior parte dei browser, tranne alcune installazioni di Internet Explorer.

Entro breve sarà disponibile anche una versione in Python, che sarà più utile per chi vorrà creare progetti simili nel lungo termine. Lo scopo del gruppo è, infatti, la conservazione storica dei dati relativi ai vecchi chip, in quanto il software è una simulazione esatta del chip, non una sua emulazione.

Vale la pena di segnalare anche un’interessatene documento con le slide di presentazione che contiene anche alcune foto curiose. (via BoingBoing)