SlideShare une entreprise Scribd logo
1  sur  18
ovvero: “ piccole regole di hardening per le contact form dei nostri blog” a cura di  Francesco Fullone  < [email_address] > un  phpBreakfast  offerto dal  GrUSP  ed  Apropos Il tuo sito? Il mio spam relay!
<?php=php_info() ?> ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
print_f ($_GLOBALS); ,[object Object],[object Object],[object Object]
Prima di iniziare un pochino di ripasso Il flusso dell'informazione all'interno di un'applicazione php avviene normalmente in un modo: INPUT   ELABORAZIONE   OUTPUT che può essere di qualsiasi tipo html, css, javascript, sql, xml o anche php! che può essere di qualsiasi tipo da form su web a dati provenienti da un db, ad interrogazione di un webservice
Non credere agli utenti, filtra l’INPUT! Utilizzare i dati di input così come vengono inviati  (raw data)  è pericoloso… BISOGNA FILTRARE! Ma di questo ne abbiamo parlato lo scorso anno... ricordate?
Mail Injection Il  Mail Injection  è una tecnica che permette di inoculare  all'interno di semplici script di invio email codice per sfruttare il web server come spam relay. Sfruttando l'input non filtrato è possibile aggiungere nuovi elementi alla nostra email, come ad esempio altri indirizzi email. Vedremo ora un esempio classico di form di invio contatti presente nel 90% dei blog/siti su internet
Un esempio di contact form ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
AVETE NOTATO L'ERRORE?
L'e(o)rrore in evidenza ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
I DATI NON SONO STATI FILTRATI...  QUESTO COMPORTERA' SPAM!!!
Dati non filtrati? Ahi, Ahi, Ahi... Supponiamo di inviare tramite form:  $_POST['email'] =  &quot;sender@real.tlc> %0A Cc:pr0n@sex.xxx %0A Bcc:spam@grrrr.xxx,v1agr4@pills.xxx <v1agr4@pills.xxx&quot; <?php if ($_POST['spamma'] == “send”) { mail( 'spam-me@fullo.net', 'ti ho mandato un messaggio!', $_POST['messaggio'],  “ From: $_POST['nome'] $_POST['cognome'] < $_POST['email'] >”); } ?> Che si traduce in una email così scritta:  To: spam-me@fullo.net Subject: ti ho mandato un messaggio! From:  $_POST['nome'] $_POST['cognome']  < sender@real.tlc> Cc:pr0n@sex.xxx Bcc:spam@grrrr.xxx,v1agr4@pills.xxx <v1agr4@pills.xxx >   $_POST['messaggio']
Una semplice cura... Così come ho fatto per gli indirizzi email potrei iniettare un nuovo subject, un body o un  mime type ! Come fare per proteggersi? Semplice, filtrando l'input! <?php $from = urldecode($from); if (eregi(&quot;&quot;,$from) || eregi(&quot;&quot;,$from)){ die(&quot;ti ho beccato spammer!&quot;); } ?> E verificando l'esistenza del dominio dell'email Con Linux è possibile utilizzare la funzione  checkdnsrr  che permette di interrogare host e servizi remoti, maggiori informazioni sul manuale online di php:  http://us3.php.net/manual/it/function.checkdnsrr.php
Una cura più efficace Usare librerie come PEAR:MAIL, Zend_Mail o gli eZ components risolve molti problemi Alcune librerie permettono infatti di fare controlli avanzati sul tipo di dato parsando non solo i “ caratteri cattivi ” ma controllando anche che le email inserite siano corrette controllandone il contenuto o addirittura interrogando direttamente i server smtp remoti per sapere se l'account esiste
Una protezione in più non si rifiuta mai... Usare AKISMET per ricontrollare i dati (già parsati)  aiuta a ridurre anche lo SPAM in ingresso. AKISMET.com  è un servizio gratuito offerto dai creatori di WordPress.com per filtrare i messaggi e controllare che non contengano spam. Il progetto mette a disposizioni delle API liberamente utilizzabili per integrare il tutto all'interno della propria applicazione. In un anno di utilizzo ho bloccato circa  100.000 messaggi di spam  (molti dei quali inviati con tecniche di mail injection)
? Domande?
Altri attacchi: Approfondimenti su web ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Contatti Francesco Fullone [email_address] ffullone http://www.fullo.net http://www.grusp.it http://www.aproposito.org
Licenza Quest'opera è stata rilasciata sotto la licenza Creative Commons Attribution-ShareAlike 2.5.  Per leggere una copia della licenza visita il sito web  http://creativecommons.org/licenses/publicdomain/  o spedisci una lettera a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Contenu connexe

En vedette

Andrea Giorgini: Implementazione di un online-shop con Typo3
Andrea Giorgini: Implementazione di un online-shop con Typo3Andrea Giorgini: Implementazione di un online-shop con Typo3
Andrea Giorgini: Implementazione di un online-shop con Typo3Francesco Fullone
 
Outsourcing, partners or suppliers?
Outsourcing, partners or suppliers?Outsourcing, partners or suppliers?
Outsourcing, partners or suppliers?Francesco Fullone
 
Compromises and not solution
Compromises and not solutionCompromises and not solution
Compromises and not solutionFrancesco Fullone
 
Simone Carletti: Zend Framework ed i Web Service
Simone Carletti: Zend Framework ed i Web ServiceSimone Carletti: Zend Framework ed i Web Service
Simone Carletti: Zend Framework ed i Web ServiceFrancesco Fullone
 
Your browser, your storage (extended version)
Your browser, your storage (extended version)Your browser, your storage (extended version)
Your browser, your storage (extended version)Francesco Fullone
 
extended slow parts, HTML5 meets WPO
extended slow parts, HTML5 meets WPOextended slow parts, HTML5 meets WPO
extended slow parts, HTML5 meets WPOFrancesco Fullone
 
Quality, Courtesy and a big Parking
Quality, Courtesy and a big ParkingQuality, Courtesy and a big Parking
Quality, Courtesy and a big ParkingFrancesco Fullone
 

En vedette (14)

Being agile
Being agileBeing agile
Being agile
 
Andrea Giorgini: Implementazione di un online-shop con Typo3
Andrea Giorgini: Implementazione di un online-shop con Typo3Andrea Giorgini: Implementazione di un online-shop con Typo3
Andrea Giorgini: Implementazione di un online-shop con Typo3
 
PHP for the Enterprise
PHP for the EnterprisePHP for the Enterprise
PHP for the Enterprise
 
Outsourcing, partners or suppliers?
Outsourcing, partners or suppliers?Outsourcing, partners or suppliers?
Outsourcing, partners or suppliers?
 
Compromises and not solution
Compromises and not solutionCompromises and not solution
Compromises and not solution
 
Simone Carletti: Zend Framework ed i Web Service
Simone Carletti: Zend Framework ed i Web ServiceSimone Carletti: Zend Framework ed i Web Service
Simone Carletti: Zend Framework ed i Web Service
 
your browser, my storage
your browser, my storageyour browser, my storage
your browser, my storage
 
Your browser, your storage (extended version)
Your browser, your storage (extended version)Your browser, your storage (extended version)
Your browser, your storage (extended version)
 
Lucio Zambon: PHP@Elettra
Lucio Zambon: PHP@ElettraLucio Zambon: PHP@Elettra
Lucio Zambon: PHP@Elettra
 
Web 2.0 with AS/400
Web 2.0 with AS/400Web 2.0 with AS/400
Web 2.0 with AS/400
 
Agile == Dynamic?
Agile == Dynamic?Agile == Dynamic?
Agile == Dynamic?
 
extended slow parts, HTML5 meets WPO
extended slow parts, HTML5 meets WPOextended slow parts, HTML5 meets WPO
extended slow parts, HTML5 meets WPO
 
Quality, Courtesy and a big Parking
Quality, Courtesy and a big ParkingQuality, Courtesy and a big Parking
Quality, Courtesy and a big Parking
 
your browser, your storage
your browser, your storageyour browser, your storage
your browser, your storage
 

Similaire à Il tuo sito? Il mio spam relay!

Web Application Insecurity Uncensored
Web Application Insecurity UncensoredWeb Application Insecurity Uncensored
Web Application Insecurity Uncensoredjekil
 
Sviluppare estensioni per google chrome
Sviluppare estensioni per google chromeSviluppare estensioni per google chrome
Sviluppare estensioni per google chromeMarco Vito Moscaritolo
 
WordCamp Bologna 2018 - Paolo Dolci
WordCamp Bologna 2018 - Paolo DolciWordCamp Bologna 2018 - Paolo Dolci
WordCamp Bologna 2018 - Paolo DolciWpSEO.it
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuerySandro Marcon
 
Web Performance Optimization
Web Performance OptimizationWeb Performance Optimization
Web Performance OptimizationAlessandro Martin
 
Iab Forum 2008: Le tue email nello spambox, i tuoi soldi nel cestino (e spess...
Iab Forum 2008: Le tue email nello spambox, i tuoi soldi nel cestino (e spess...Iab Forum 2008: Le tue email nello spambox, i tuoi soldi nel cestino (e spess...
Iab Forum 2008: Le tue email nello spambox, i tuoi soldi nel cestino (e spess...Contactlab
 
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesaHackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesaSimone Onofri
 
Introduzione al linguaggio PHP
Introduzione al linguaggio PHPIntroduzione al linguaggio PHP
Introduzione al linguaggio PHPextrategy
 
Phpday 2010: facebook php framework
Phpday 2010: facebook php frameworkPhpday 2010: facebook php framework
Phpday 2010: facebook php frameworkMatteo Baccan
 
Web Application Insecurity L D2007
Web Application Insecurity  L D2007Web Application Insecurity  L D2007
Web Application Insecurity L D2007jekil
 
Hosting: installiamo Magento sul nostro hosting, la guida passo passo #TipOfT...
Hosting: installiamo Magento sul nostro hosting, la guida passo passo #TipOfT...Hosting: installiamo Magento sul nostro hosting, la guida passo passo #TipOfT...
Hosting: installiamo Magento sul nostro hosting, la guida passo passo #TipOfT...Aruba S.p.A.
 

Similaire à Il tuo sito? Il mio spam relay! (20)

Phpcon2009 Php e Sicurezza
Phpcon2009 Php e SicurezzaPhpcon2009 Php e Sicurezza
Phpcon2009 Php e Sicurezza
 
Web Application Insecurity Uncensored
Web Application Insecurity UncensoredWeb Application Insecurity Uncensored
Web Application Insecurity Uncensored
 
Sviluppare estensioni per google chrome
Sviluppare estensioni per google chromeSviluppare estensioni per google chrome
Sviluppare estensioni per google chrome
 
WordCamp Bologna 2018 - Paolo Dolci
WordCamp Bologna 2018 - Paolo DolciWordCamp Bologna 2018 - Paolo Dolci
WordCamp Bologna 2018 - Paolo Dolci
 
Owasp parte3
Owasp parte3Owasp parte3
Owasp parte3
 
Introduzione a jQuery
Introduzione a jQueryIntroduzione a jQuery
Introduzione a jQuery
 
Dal Click Al Web Server
Dal Click Al Web ServerDal Click Al Web Server
Dal Click Al Web Server
 
Form e HTML basi
Form e HTML basiForm e HTML basi
Form e HTML basi
 
Web Performance Optimization
Web Performance OptimizationWeb Performance Optimization
Web Performance Optimization
 
Iab Forum 2008: Le tue email nello spambox, i tuoi soldi nel cestino (e spess...
Iab Forum 2008: Le tue email nello spambox, i tuoi soldi nel cestino (e spess...Iab Forum 2008: Le tue email nello spambox, i tuoi soldi nel cestino (e spess...
Iab Forum 2008: Le tue email nello spambox, i tuoi soldi nel cestino (e spess...
 
Seo html russo
Seo html russoSeo html russo
Seo html russo
 
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesaHackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
Hackers vs Developers - Cross Site Scripting (XSS) Attacco e difesa
 
Pycon Jungle
Pycon JunglePycon Jungle
Pycon Jungle
 
[ITA]_Server_violato
[ITA]_Server_violato[ITA]_Server_violato
[ITA]_Server_violato
 
Introduzione al linguaggio PHP
Introduzione al linguaggio PHPIntroduzione al linguaggio PHP
Introduzione al linguaggio PHP
 
iframe facebook
iframe facebookiframe facebook
iframe facebook
 
Phpday 2010: facebook php framework
Phpday 2010: facebook php frameworkPhpday 2010: facebook php framework
Phpday 2010: facebook php framework
 
Corso di php01
Corso di php01Corso di php01
Corso di php01
 
Web Application Insecurity L D2007
Web Application Insecurity  L D2007Web Application Insecurity  L D2007
Web Application Insecurity L D2007
 
Hosting: installiamo Magento sul nostro hosting, la guida passo passo #TipOfT...
Hosting: installiamo Magento sul nostro hosting, la guida passo passo #TipOfT...Hosting: installiamo Magento sul nostro hosting, la guida passo passo #TipOfT...
Hosting: installiamo Magento sul nostro hosting, la guida passo passo #TipOfT...
 

Plus de Francesco Fullone

Life Cycle Design e Circular Economy: un caso reale
Life Cycle Design e Circular Economy: un caso reale Life Cycle Design e Circular Economy: un caso reale
Life Cycle Design e Circular Economy: un caso reale Francesco Fullone
 
Okr istruzioni per l'uso - devfest
Okr   istruzioni per l'uso - devfestOkr   istruzioni per l'uso - devfest
Okr istruzioni per l'uso - devfestFrancesco Fullone
 
OKR, sono veramente utili alla mia azienda?
OKR, sono veramente utili alla mia azienda?OKR, sono veramente utili alla mia azienda?
OKR, sono veramente utili alla mia azienda?Francesco Fullone
 
Open Governance, un caso reale
Open Governance, un caso realeOpen Governance, un caso reale
Open Governance, un caso realeFrancesco Fullone
 
A recommendation engine for your applications
A recommendation engine for your applicationsA recommendation engine for your applications
A recommendation engine for your applicationsFrancesco Fullone
 
A recommendation engine for your applications
A recommendation engine for your applicationsA recommendation engine for your applications
A recommendation engine for your applicationsFrancesco Fullone
 
MVP & Startup, with OpenSource Software and Microsoft Azure
MVP & Startup, with OpenSource Software and Microsoft AzureMVP & Startup, with OpenSource Software and Microsoft Azure
MVP & Startup, with OpenSource Software and Microsoft AzureFrancesco Fullone
 
Help yourself, grow an healthy ecosystem
Help yourself, grow an healthy ecosystemHelp yourself, grow an healthy ecosystem
Help yourself, grow an healthy ecosystemFrancesco Fullone
 
From brainstorming to product development
From brainstorming to product developmentFrom brainstorming to product development
From brainstorming to product developmentFrancesco Fullone
 
From webagency to...a better job, life and a lot of fun
From webagency to...a better job, life and a lot of funFrom webagency to...a better job, life and a lot of fun
From webagency to...a better job, life and a lot of funFrancesco Fullone
 
Don't touch the mobile parts
Don't touch the mobile partsDon't touch the mobile parts
Don't touch the mobile partsFrancesco Fullone
 

Plus de Francesco Fullone (20)

Life Cycle Design e Circular Economy: un caso reale
Life Cycle Design e Circular Economy: un caso reale Life Cycle Design e Circular Economy: un caso reale
Life Cycle Design e Circular Economy: un caso reale
 
Okr istruzioni per l'uso - devfest
Okr   istruzioni per l'uso - devfestOkr   istruzioni per l'uso - devfest
Okr istruzioni per l'uso - devfest
 
OKR, sono veramente utili alla mia azienda?
OKR, sono veramente utili alla mia azienda?OKR, sono veramente utili alla mia azienda?
OKR, sono veramente utili alla mia azienda?
 
Okr per community - icms
Okr   per community - icmsOkr   per community - icms
Okr per community - icms
 
Open Governance, un caso reale
Open Governance, un caso realeOpen Governance, un caso reale
Open Governance, un caso reale
 
A recommendation engine for your applications
A recommendation engine for your applicationsA recommendation engine for your applications
A recommendation engine for your applications
 
A recommendation engine for your applications
A recommendation engine for your applicationsA recommendation engine for your applications
A recommendation engine for your applications
 
Con te non ci lavoro
Con te non ci lavoroCon te non ci lavoro
Con te non ci lavoro
 
Con te non ci lavoro
Con te non ci lavoroCon te non ci lavoro
Con te non ci lavoro
 
Continuous budgeting
Continuous budgetingContinuous budgeting
Continuous budgeting
 
Remote working istruzioni
Remote working istruzioniRemote working istruzioni
Remote working istruzioni
 
Remote working istruzioni
Remote working istruzioniRemote working istruzioni
Remote working istruzioni
 
MVP & Startup, with OpenSource Software and Microsoft Azure
MVP & Startup, with OpenSource Software and Microsoft AzureMVP & Startup, with OpenSource Software and Microsoft Azure
MVP & Startup, with OpenSource Software and Microsoft Azure
 
Remote working istruzioni
Remote working istruzioniRemote working istruzioni
Remote working istruzioni
 
Help yourself, grow an healthy ecosystem
Help yourself, grow an healthy ecosystemHelp yourself, grow an healthy ecosystem
Help yourself, grow an healthy ecosystem
 
From brainstorming to product development
From brainstorming to product developmentFrom brainstorming to product development
From brainstorming to product development
 
From webagency to...a better job, life and a lot of fun
From webagency to...a better job, life and a lot of funFrom webagency to...a better job, life and a lot of fun
From webagency to...a better job, life and a lot of fun
 
Compromessi e non soluzioni
Compromessi e non soluzioniCompromessi e non soluzioni
Compromessi e non soluzioni
 
Don't touch the mobile parts
Don't touch the mobile partsDon't touch the mobile parts
Don't touch the mobile parts
 
Please dont touch-3.6-jsday
Please dont touch-3.6-jsdayPlease dont touch-3.6-jsday
Please dont touch-3.6-jsday
 

Il tuo sito? Il mio spam relay!

  • 1. ovvero: “ piccole regole di hardening per le contact form dei nostri blog” a cura di Francesco Fullone < [email_address] > un phpBreakfast offerto dal GrUSP ed Apropos Il tuo sito? Il mio spam relay!
  • 2.
  • 3.
  • 4. Prima di iniziare un pochino di ripasso Il flusso dell'informazione all'interno di un'applicazione php avviene normalmente in un modo: INPUT ELABORAZIONE OUTPUT che può essere di qualsiasi tipo html, css, javascript, sql, xml o anche php! che può essere di qualsiasi tipo da form su web a dati provenienti da un db, ad interrogazione di un webservice
  • 5. Non credere agli utenti, filtra l’INPUT! Utilizzare i dati di input così come vengono inviati (raw data) è pericoloso… BISOGNA FILTRARE! Ma di questo ne abbiamo parlato lo scorso anno... ricordate?
  • 6. Mail Injection Il Mail Injection è una tecnica che permette di inoculare all'interno di semplici script di invio email codice per sfruttare il web server come spam relay. Sfruttando l'input non filtrato è possibile aggiungere nuovi elementi alla nostra email, come ad esempio altri indirizzi email. Vedremo ora un esempio classico di form di invio contatti presente nel 90% dei blog/siti su internet
  • 7.
  • 9.
  • 10. I DATI NON SONO STATI FILTRATI... QUESTO COMPORTERA' SPAM!!!
  • 11. Dati non filtrati? Ahi, Ahi, Ahi... Supponiamo di inviare tramite form: $_POST['email'] = &quot;sender@real.tlc> %0A Cc:pr0n@sex.xxx %0A Bcc:spam@grrrr.xxx,v1agr4@pills.xxx <v1agr4@pills.xxx&quot; <?php if ($_POST['spamma'] == “send”) { mail( 'spam-me@fullo.net', 'ti ho mandato un messaggio!', $_POST['messaggio'], “ From: $_POST['nome'] $_POST['cognome'] < $_POST['email'] >”); } ?> Che si traduce in una email così scritta: To: spam-me@fullo.net Subject: ti ho mandato un messaggio! From: $_POST['nome'] $_POST['cognome'] < sender@real.tlc> Cc:pr0n@sex.xxx Bcc:spam@grrrr.xxx,v1agr4@pills.xxx <v1agr4@pills.xxx > $_POST['messaggio']
  • 12. Una semplice cura... Così come ho fatto per gli indirizzi email potrei iniettare un nuovo subject, un body o un mime type ! Come fare per proteggersi? Semplice, filtrando l'input! <?php $from = urldecode($from); if (eregi(&quot;&quot;,$from) || eregi(&quot;&quot;,$from)){ die(&quot;ti ho beccato spammer!&quot;); } ?> E verificando l'esistenza del dominio dell'email Con Linux è possibile utilizzare la funzione checkdnsrr che permette di interrogare host e servizi remoti, maggiori informazioni sul manuale online di php: http://us3.php.net/manual/it/function.checkdnsrr.php
  • 13. Una cura più efficace Usare librerie come PEAR:MAIL, Zend_Mail o gli eZ components risolve molti problemi Alcune librerie permettono infatti di fare controlli avanzati sul tipo di dato parsando non solo i “ caratteri cattivi ” ma controllando anche che le email inserite siano corrette controllandone il contenuto o addirittura interrogando direttamente i server smtp remoti per sapere se l'account esiste
  • 14. Una protezione in più non si rifiuta mai... Usare AKISMET per ricontrollare i dati (già parsati) aiuta a ridurre anche lo SPAM in ingresso. AKISMET.com è un servizio gratuito offerto dai creatori di WordPress.com per filtrare i messaggi e controllare che non contengano spam. Il progetto mette a disposizioni delle API liberamente utilizzabili per integrare il tutto all'interno della propria applicazione. In un anno di utilizzo ho bloccato circa 100.000 messaggi di spam (molti dei quali inviati con tecniche di mail injection)
  • 16.
  • 17. Contatti Francesco Fullone [email_address] ffullone http://www.fullo.net http://www.grusp.it http://www.aproposito.org
  • 18. Licenza Quest'opera è stata rilasciata sotto la licenza Creative Commons Attribution-ShareAlike 2.5. Per leggere una copia della licenza visita il sito web http://creativecommons.org/licenses/publicdomain/ o spedisci una lettera a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.