• Save
Il tuo sito? Il mio spam relay!
Upcoming SlideShare
Loading in...5
×
 

Il tuo sito? Il mio spam relay!

on

  • 7,575 views

piccole regolette di hardening per le form di contatto. Un talk di 30 minuti al SecurityDay di Cesena

piccole regolette di hardening per le form di contatto. Un talk di 30 minuti al SecurityDay di Cesena

Statistics

Views

Total Views
7,575
Views on SlideShare
7,561
Embed Views
14

Actions

Likes
2
Downloads
0
Comments
0

2 Embeds 14

http://www.fullo.net 13
http://www.slideshare.net 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Il tuo sito? Il mio spam relay! Il tuo sito? Il mio spam relay! Presentation Transcript

  • 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() ?>
    • Chi sono:
    • Sviluppatore PHP dal 1999
    • Blogger a tempo pieno
    • Sistemista, sviluppatore e consulente part-time ;)
    • Che faccio:
    • Collaboro con gruppi come Apropos ed il GrUSP per la diffusione dell'open source e di php
    • Coordino un progetto (in php) per la gestione del project management chiamato phpCollab [ http://www.php-collab.org ]
    • Collaboro a diversi progetti online
  • print_f ($_GLOBALS);
    • In questo talk si discuterà in 30 minuti di:
    • Tecniche di Mail Injection
    • Controlli lato client, controlli lato server e sistemi antispam remoti
  • 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
    • <form method=”post” action=”<?=$_SERVER['PHP_SELF'];?>”>
    • nome: <input type=”text” name=”nome” /> <br/>
    • cognome: <input type=”text” name=”cognome” /> <br/>
    • email: <input type=”text” name=”email” /> <br/>
    • il messaggio: <br/><textarea name=”messaggio”></textarea><br/>
    • <input type=”submit” name=”spamma” value=”send”/>
    • </form>
    • <?php
    • if ($_POST['spamma'] == “send”)
    • {
    • mail(
    • 'spam-me@fullo.net',
    • 'ti ho mandato un messaggio!',
    • $_POST['messaggio'],
    • “ From: $_POST['nome'] $_POST['cognome'] <$_POST['email']> ”);
    • }
    • ?>
  • AVETE NOTATO L'ERRORE?
  • L'e(o)rrore in evidenza
    • <form method=”post” action=”<?=$_SERVER['PHP_SELF'];?>”>
    • nome: <input type=”text” name=”nome” /> <br/>
    • cognome: <input type=”text” name=”cognome” /> <br/>
    • email: <input type=”text” name=”email” /> <br/>
    • il messaggio: <br/><textarea name=”messaggio”></textarea><br/>
    • <input type=”submit” name=”spamma” value=”send”/>
    • </form>
    • <?php
    • if ($_POST['spamma'] == “send”)
    • {
    • mail(
    • 'spam-me@fullo.net',
    • 'ti ho mandato un messaggio!',
    • $_POST['messaggio'] ,
    • “ From: $_POST['nome'] $_POST['cognome']
    • < $_POST['email'] > ”);
    • }
    • ?>
  • 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
    • Url interessanti:
    • Akismet
    • http://www.akismet.com
    • SecurePHP Wiki
    • http://www.securephpwiki.com/index.php/Email_Injection
    • PHP Security Guide
    • http://phpsec.org/projects/guide /
    • Hardened-PHP http://www.hardened-php.net/suhosin/index.html
    • Il Wiki del GrUSP
    • http://wiki.grusp.it
  • 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.