<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Il blog di webEngine &#187; Sicurezza</title>
	<atom:link href="http://blog.webeng.it/category/sicurezza/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.webeng.it</link>
	<description>Blog dedicato alle tecnologie Web e alle notizie dal mondo della rete...</description>
	<lastBuildDate>Thu, 17 Dec 2009 13:07:15 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Muore Live OneCare e nasce Microsoft Morro, l&#8217;antivirus &#8220;gratis&#8221; per windows</title>
		<link>http://blog.webeng.it/2008/11/19/muore-live-onecare-e-nasce-microsoft-morro-lantivirus-gratis-per-windows/</link>
		<comments>http://blog.webeng.it/2008/11/19/muore-live-onecare-e-nasce-microsoft-morro-lantivirus-gratis-per-windows/#comments</comments>
		<pubDate>Wed, 19 Nov 2008 19:41:07 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Articoli Generici]]></category>
		<category><![CDATA[Hi-Tech]]></category>
		<category><![CDATA[Sicurezza]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[antivirus]]></category>
		<category><![CDATA[live onecare]]></category>
		<category><![CDATA[microsoft]]></category>

		<guid isPermaLink="false">http://blog.webeng.it/?p=44</guid>
		<description><![CDATA[Microsoft in sede di chiusura dei mercati ha annunciato con un comunicato l&#8217;intenzione di ritirare dal mercato a partire dal 30 Giugno 2009, Windows Live OneCare la suite Microsoft a pagamento per la sicurezza dei clienti windows per passare a una soluzione gratuita per l&#8217;utente.
Microsoft sta lentamente rivalutando il suo approccio al mercato, in un [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft in sede di chiusura dei mercati ha annunciato con un comunicato l&#8217;intenzione di ritirare dal mercato a partire dal 30 Giugno 2009, Windows Live OneCare la suite Microsoft a pagamento per la sicurezza dei clienti windows per passare a una soluzione gratuita per l&#8217;utente.</p>
<p><span id="more-44"></span>Microsoft sta lentamente rivalutando il suo approccio al mercato, in un momento in cui si assiste a una crisi delle vendite windows Vista e a una serie di richieste di downgrade alla versione precedente del noto sistema operativo, propende per una soluzione di tipo &#8220;free&#8221;, che sia in grado di proteggere gli utenti da tutti i potenziali problemi presenti in rete e fornire la soluzione più economica ed efficiente a problemi come Virus, spyware e malware.</p>
<p>Il nuovo software bundle che sostituirà windows live OneCare, nome in codice &#8220;Morro,&#8221; incorpora una nuova tecnologia anti-malware in grado di far vivere agli utenti sonni tranquilli. La grande differenza in questo caso la farà il prezzo poichè come già detto, il pacchetto sarà distribuito gratuitamente assieme al sistema operativo Windows.</p>
<p>Dietro questa scelta strategica, legata secondo noi anche al lancio di Windows 7, si celano prospettive di mercato sicuramente imprevedibili poichè questa, spiazzarerà certamente i noti produttori di software di sicurezza su windows che offrono attualmente software con le medesime funzionalità a pagamento.</p>
<p>Microsoft, in un periodo in cui la fetta di mercato degli utenti medio/esperti tende al passaggio a soluzioni di tipo Open Source, ha capito che la strategia per rilanciare il proprio prodotto ruota attorno alla sicurezza e alla stabilità dello stesso. E&#8217; giusto, che un sistema operativo tanto più se a pagamento offra all&#8217;utente la possibilità di utilizzarlo in sicurezza e senza troppi problemi, quindi, stavolta l&#8217;azienda di Redmond con le sue scelte ha centrato il bersaglio.</p>
<p>Microsoft è stata molte volte al centro dell&#8217;attenzione per le vulnerabilità del suo main product e ciò ha da sempre costituito un suo punto debole. Tra le due alternative, scegliere di non fare niente e continuare ad essere presa di mira o fare qualcosa, la seconda è sicuramente il miglior approccio, questo soprattutto per difendere le proprie fette di mercato consumer/bussiness dagli attacchi sferrati dai sempre più diffusi prodotti di qualità Open Source.</p>
<p>Sperando di non veder sollevate in questo caso questioni di anti-trust, speriamo che anche le aziende del settore trovino la strada per riconvertire il proprio business subendo il minor danno possibile.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webeng.it/2008/11/19/muore-live-onecare-e-nasce-microsoft-morro-lantivirus-gratis-per-windows/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Come proteggere un form html dall&#8217;invio di SPAM</title>
		<link>http://blog.webeng.it/2007/10/13/impedire-linvio-di-spam-da-un-form-html/</link>
		<comments>http://blog.webeng.it/2007/10/13/impedire-linvio-di-spam-da-un-form-html/#comments</comments>
		<pubDate>Sat, 13 Oct 2007 13:29:35 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Sicurezza]]></category>
		<category><![CDATA[Sviluppo Web]]></category>

		<guid isPermaLink="false">http://blog.webeng.it/2007/10/13/impedire-linvio-di-spam-da-un-form-html/</guid>
		<description><![CDATA[In questo articolo proveremo ad illustrarvi come proteggere un form HTML dall&#8217;invio di SPAM mediante la tecnica del CAPTCHA. I form html non gestiti in modo ottimale possono essere causa di problemi sia nel caso in cui il modulo invii delle informazioni tramite email che nel caso inserisca le informazioni in un database.
Il rischio principale [...]]]></description>
			<content:encoded><![CDATA[<p>In questo articolo proveremo ad illustrarvi come proteggere un form HTML dall&#8217;invio di SPAM mediante la tecnica del CAPTCHA. I form html non gestiti in modo ottimale possono essere causa di problemi sia nel caso in cui il modulo invii delle informazioni tramite email che nel caso inserisca le informazioni in un database.</p>
<p><span id="more-5"></span>Il rischio principale è costituito dagli SPAMBOT ovvero dei software in grado di effettuare richieste http allo scopo di bucare i form non protetti. Le conseguenze di un attacco di questo tipo possono essere il sovraccarico del server web, malfunzionamenti del server di posta nonchè il rapido accumularsi di informazioni inutili sul Database.Il potenziale pericolo è rappresentato dal fatto che analizzando i tag di una pagina html, si possono analizzare facilmente le variabili usate per il passaggio delle informazioni, il metodo utilizzato (POST/GET) e la pagina che elabora la richiesta di invio email.</p>
<p>Quindi un qualsiasi individuo che vuole crearvi una grana, può, mediante un banale programmino che invia richieste HTTP effettuare la medesima richiesta infinite volte e intasarvi la posta o riempirvi il database. Per questo problema nasce l&#8217;esigenza di validare lato server le richieste effettuate tramite la pagina che si occupa nello specifico di elaborare la richiesta.</p>
<p>La tecnica del Captcha Code &#8220;completely automated public Turing test to tell computers and humans apart&#8221; è uno dei metodi più utilizzati per verificare se chi effettua la richiesta è un umano oppure un BOT.</p>
<p>A questo punto mostriamo un esempio di come implementare tale tecnica all&#8217;interno del proprio sito web:</p>
<p>Iniziamo con la creazione di una tabella sul nostro DB MySql che contenga le informazioni necessarie per implementare la tecnica del Captcha. Connettiamoci al nostro DB tramite PhpMyAdmin o tramite linea di comando e creiamo la tabella captcha con il seguente script:</p>
<pre class="sql">CREATE TABLE `captcha` (
`captcha_id` varchar(255) character set latin1 collate latin1_general_ci NOT NULL,
`code` varchar(255) character set latin1 collate latin1_general_ci NOT NULL,
`timestamp` varchar(255) character set latin1 collate latin1_general_ci NOT NULL default ''
) ENGINE=MyISAM DEFAULT CHARSET=latin1;</pre>
<p>Occupiamoci ora della pagina dove verrà visualizzato il FORM, preleviamo il codice e salviamolo in un file di testo index.php (per comodità si consiglia di posizionare tutti i file creati all&#8217;interno della stessa directory nella root del web server) :</p>
<pre class="php">&lt;?php
echo "&lt;html&gt;";
echo "&lt;head&gt;";

// genero un identificativo criptato md5 da associare al codice di sicurezza
$captcha_id = md5(microtime().mt_rand().'super1segreto2segretissimo3');

// creo un codice di controllo per la verifica dell'identificativo
$sale = "frase super segreta da cambiare a discrezione.";

// cripto in md5 i due codici generati
$chk = md5($sale.$captcha_id);

echo "&lt;/head&gt;";
echo "&lt;body&gt;";

//Creo il form

echo "&lt;form method=\"post\" action=\"email.php\"&gt;";
echo "Cognome : &lt;input type=\"text\" name=\"surname\"/&gt;";
echo "&lt;br/&gt;";
echo "Nome : &lt;input type=\"text\" name=\"name\"/&gt;";
echo "&lt;br/&gt;";
echo "E-mail : &lt;input type=\"text\" name=\"mail\"/&gt;";
echo "&lt;br/&gt;";
echo "&lt;img src=\"captcha.php?id=".$captcha_id."&amp;chk=".$chk."\" width=\"110\" height=\"70\"/&gt;";
echo "&lt;input type=\"text\" name=\"captcha_code\"/&gt;";
echo "&lt;br/&gt;";
echo "&lt;input name=\"captcha_id\" type=\"hidden\" id=\"captcha_id\" value=\"".$captcha_id."\"/&gt;";
echo "&lt;br/&gt;";
echo "&lt;input type=\"submit\" name=\"submit\" value=\"Submit\"/&gt;";
echo "&lt;br/&gt;";
echo "&lt;/form&gt;";

echo "&lt;/body&gt;";
?&gt;</pre>
<p>Notare bene che nello script precedente:</p>
<p>l&#8217;immagine Captcha è stata generata dalla richiesta presente nell&#8217;attributo src dell&#8217;immagine<br />
il campo captcha_code conterrà il codice di sicurezza che l&#8217;utente dovrà inserire per validare l&#8217;elaborazione<br />
il campo captcha_id contiene il captcha_id generato precedentemente nella head<br />
Ecco il listato della pagina che genera l&#8217;immagine CAPTCHA, salviamo il codice in un file di testo avendo l&#8217;accortezza di salvarlo come captcha.php :</p>
<pre class="php">&lt;?php
// controllo se è stato fornito l identificativo del codice captcha
if(!isset($_GET['id'])) exit();

// controllo la validità dell identificativo
$captcha_id = $_GET['id'];
if(!preg_match("/^[a-f0-9]{32}$/",$captcha_id)) exit();

// ricreo il codice di controllo e lo confronto con quello passato via GET
$sale = "frase super segreta da cambiare a discrezione.";
$chk = md5($sale . $captcha_id);
if($chk != $_GET['chk']) exit();

// creo l immagine
// ---------------------------------------------------------------

// le dimensioni dell immagine
$size_x = 110;
$size_y = 70;

$img = imagecreatetruecolor($size_x,$size_y);

// alloco un colore per lo sfondo
$backgroung = imagecolorallocate($img,255, 255, 255);

// alloco 3 colori per le 3 lettere da decifrare
// utilizzo il canale alpha per impostare la trasparenza
$color[] = imagecolorallocatealpha($img,110,110,110,60);
$color[] = imagecolorallocatealpha($img,3,187,63,60);
$color[] = imagecolorallocatealpha($img,255,0,0,70);

// mischio l ordine dei colori
shuffle($color);

// coloro lo sfondo creando un rettangolo
imagefilledrectangle($img,0,0,$size_x-1,$size_y-1,$backgroung);

// i caratteri da utilizzare per il codice di sicurezza
$caratteri = "ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789";

// inizializzo la variabile che conterrà il codice
$codice = '';

// per ciascuno dei 3 caratteri
for ($i=0 ; $i &lt; 3 ; $i++){
// estraggo un carattere a caso
$codice .= $caratteri{rand(0,34)};
// disegno il carattere
imagettftext(
$img,
50,
-5+rand(0,10), // rotazione casuale
($i+0.3)*24,
60,
$color[$i],
'./VeraMono.ttf',
$codice{$i});
}

// inserisco identificativo e codice nel DB
// ---------------------------------------------------------------
mysql_connect('IP_MIO_SERVER_MYSQL','USER_MYSQL','PASS_MYSQL');
mysql_select_db('NOME_DB_MYSQL');

mysql_query("REPLACE INTO captcha (captcha_id,code,`timestamp`)
values ('$captcha_id','$codice',UNIX_TIMESTAMP())");

// con prob. impostata da $probabilità cancello i record più vecchi
$probabilità = 5; // 5%
if(mt_rand(1,100) &lt;= $probabilità){
$durata_captcha = 60*60;
mysql_query("DELETE FROM captcha WHERE `timestamp`&lt;(UNIX_TIMESTAMP()-$durata_captcha)");
}

// invio l immagine al browser
// ---------------------------------------------------------------
header("Content-type: image/png");
imagepng($img);
?&gt;</pre>
<p>Da notare che nello script precedente si utilizza un font per generare l&#8217;immagine (VeraMono.ttf)  il quale può essere modificato a proprio piacimento con un qualsiasi font installato nel proprio pc o scaricato da internet. Per scaricare il font utilizzato nell&#8217;esempio cliccare qui. Nell&#8217;esempio il font in questione è posizionato all&#8217;interno della stessa cartella dove sono stati posizionati gli script.</p>
<p>Passiamo ora ad esaminare la pagina che invierà l&#8217; e-mail e che si occuperà anche di verificare la validità dell&#8217;elaborazione, copiamo il codice sottostante e incolliamolo su un file di testo avendo l&#8217;accortezza di salvarlo come email.php.</p>
<pre class="php">&lt;?php
//Inclusione file esterni
 require_once('send_mail.php');

// Recupero dei dati POST
$surname = $_POST['surname'];
$name = $_POST['name'];
$mail = $_POST['mail'];

// dopo quanto tempo i dati nella tabella del DB scadono
$durata_captcha = 60*60;

// ci sono tutti i dati?
if(!isset($_POST['captcha_code']) OR !isset($_POST['captcha_id'])) exit;
$captcha_code = $_POST['captcha_code'];
$captcha_id = $_POST['captcha_id'];

// controlla la validità del $captcha_id
if(!preg_match("/^[a-f0-9]{32}$/",$captcha_id)){
// se il $captcha_id non è valido termino la procedura
echo '$captcha_id non valido';
}else{
// controlla la validità del $captcha_code
if (!preg_match("/^[a-zA-Z0-9]{3}$/", $captcha_code)){
// se il $captcha_code non è valido non faccio la ricerca nel DB
echo '$captcha_code non valido';
}else{
// $captcha_id e $captcha_code sono ben formattati, posso fare la verifica
// rendo tutte le lettere del $captcha_code maiuscole e
// sostituisco gli zeri con le O
$captcha_code = strtoupper($captcha_code);
$captcha_code = str_replace('0','O',$captcha_code);

mysql_connect('IP_MIO_SERVER_MYSQL','USER_MYSQL','PASS_MYSQL') or die(mysql_error());
mysql_select_db('NOME_DB_MYSQL') or die(mysql_error());

// nella verifica non considero dati più vecchi di $durata_captcha secondi
$res = mysql_query("SELECT code FROM captcha WHERE captcha_id = '$captcha_id' AND code = '$captcha_code' AND `timestamp` &gt; (UNIX_TIMESTAMP() - $durata_captcha)") or die (mysql_error());
if(mysql_num_rows($res) != 1){
// verifica fallita
echo '$captcha_code errato';
}else{
// cancello i vecchi codici e quello corrente
mysql_query("DELETE FROM captcha WHERE captcha_id = '$captcha_id' OR `timestamp` &lt; (UNIX_TIMESTAMP() - $durata_captcha)");

//Scrittura parametri email
$from_name  = $name." ".$surname;
$from_email = $mail;
$to_name    = "NOME_DEL_DESTINATARIO";
$to_email   = "MAIL_DEL_DESTINATARIO";
$subject    = "Invio email sicura dal tuo sito";
$text_message = "This is HTML email and your email client software ain't support HTML email.";
$html_message = "&lt;!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\"&gt;\n";
$html_message.= "&lt;html&gt;&lt;head&gt;&lt;title&gt;&lt;/title&gt;\n";
$html_message.= "&lt;meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\"&gt;\n";
$html_message.= "&lt;/head&gt;\n";
$html_message.= "&lt;body&gt;";
$html_message.= "Ciao, questa è un email sicura inviata dal tuo sito";
$html_message.= "&lt;/body&gt;&lt;/html&gt;";

//Creo l'allegato
$attachment = array ("PATH_ALLEGATO_SUL_SERVER");

//Invio l'email con la funzione sendmail
sendmail ($from_name, $from_email, $to_name, $to_email, $subject, $text_message, $html_message, $attachment);

echo "&lt;script language=\"Javascript\"&gt;";
echo "&lt;!–-";
echo "alert (\"e-mail inviata con successo\");";
echo "history.go(-1);";
echo "–-&gt;";
echo "&lt;/script&gt;";
}
}
}
?&gt;</pre>
<p>I controlli effettuati all&#8217;inizio del codice illustrato permettono al server web di distinguere se si tratta di una richiesta valida o di una richiesta effettuata da un BOT.</p>
<p>Se i controlli saranno superati si passerà ad invocare la funzione sendmail che si occuperà dell&#8217;invio di una mail in formato HTML con allegati. Alternativamente a questa funzione si pùo invocare la classica funzione mail disponibile nel linguaggio PHP.</p>
<p>Ecco ora il listato della funzione sendmail invocata nel precedente script, che si occupa di inviare una mail in formato HTML. Copiare il codice e salvarlo in un file denominato send_mail.php.</p>
<pre class="php">&lt;?php
function sendmail ($from_name, $from_email, $to_name, $to_email, $subject, $text_message="", $html_message, $attachment=""){
$from = "$from_name &lt;$from_email&gt;";
$to   = "$to_name &lt;$to_email&gt;";
$main_boundary = "----=_NextPart_".md5(rand());
$text_boundary = "----=_NextPart_".md5(rand());
$html_boundary = "----=_NextPart_".md5(rand());
$headers  = "From: $from\n";
$headers .= "Reply-To: $from\n";
$headers .= "X-Mailer: Hermawan Haryanto (<a href="http://hermawan.com)\n">http://hermawan.com)\n</a>";
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: multipart/mixed;\n\tboundary=\"$main_boundary\"\n";
$message .= "\n--$main_boundary\n";
$message .= "Content-Type: multipart/alternative;\n\tboundary=\"$text_boundary\"\n";
$message .= "\n--$text_boundary\n";
$message .= "Content-Type: text/plain; charset=\"ISO-8859-1\"\n";
$message .= "Content-Transfer-Encoding: 7bit\n\n";
$message .= ($text_message!="")?"$text_message":"Text portion of HTML Email";
$message .= "\n--$text_boundary\n";
$message .= "Content-Type: multipart/related;\n\tboundary=\"$html_boundary\"\n";
$message .= "\n--$html_boundary\n";
$message .= "Content-Type: text/html; charset=\"ISO-8859-1\"\n";
$message .= "Content-Transfer-Encoding: quoted-printable\n\n";
$message .= str_replace ("=", "=3D", $html_message)."\n";
if (isset ($attachment) &amp;&amp; $attachment != "" &amp;&amp; count ($attachment) &gt;= 1){
for ($i=0; $i&lt;count ($attachment); $i++){
$attfile = $attachment[$i];
$file_name = basename ($attfile);
$fp = fopen ($attfile, "r");
$fcontent = "";
while (!feof ($fp)){
$fcontent .= fgets ($fp, 1024);
}
$fcontent = chunk_split (base64_encode($fcontent));
@fclose ($fp);
$message .= "\n--$html_boundary\n";
$message .= "Content-Type: application/octetstream\n";
$message .= "Content-Transfer-Encoding: base64\n";
$message .= "Content-Disposition: inline; filename=\"$file_name\"\n";
$message .= "Content-ID: &lt;$file_name&gt;\n\n";
$message .= $fcontent;
}
}
$message .= "\n--$html_boundary--\n";
$message .= "\n--$text_boundary--\n";
$message .= "\n--$main_boundary--\n";
@mail ($to, $subject, $message, $headers);
}
?&gt;</pre>
<p>A questo punto possiamo testare lo script chiamando la pagina index.php dal nostro browser.</p>
<p>Alla prossima&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.webeng.it/2007/10/13/impedire-linvio-di-spam-da-un-form-html/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
