mercoledì 8 settembre 2010

Una comoda classe php captcha

Oggi presento una comoda classe php captcha, proveniente da OpenCart . Essendo il progetto open source, possiamo analizzare come funziona ma soprattutto come usarla con tre righe di codice.
Prima di tutto vediamo il contenuto della classe:
<?php

class Captcha {



/**
* Classe captcha.php - da www.opencart.com
*/

protected $code;
protected $width = 35;
protected $height = 150;

function __construct() {
$this->code = substr(sha1(mt_rand()), 17, 6);
}
function getCode(){
return $this->code;
}
function showImage() {
$image = imagecreatetruecolor($this->height, $this->width);
$width = imagesx($image);
$height = imagesy($image);
$black = imagecolorallocate($image, 0, 0, 0);
$white = imagecolorallocate($image, 255, 255, 255);
$red = imagecolorallocatealpha($image, 255, 0, 0, 75);
$green = imagecolorallocatealpha($image, 0, 255, 0, 75);
$blue = imagecolorallocatealpha($image, 0, 0, 255, 75);
imagefilledrectangle($image, 0, 0, $width, $height, $white);
imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $red);
imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $green);
imagefilledellipse($image, ceil(rand(5, 145)), ceil(rand(0, 35)), 30, 30, $blue);
imagefilledrectangle($image, 0, 0, $width, 0, $black);
imagefilledrectangle($image, $width - 1, 0, $width - 1, $height - 1, $black);
imagefilledrectangle($image, 0, 0, 0, $height - 1, $black);
imagefilledrectangle($image, 0, $height - 1, $width, $height - 1, $black);
imagestring($image, 10, intval(($width - (strlen($this->code) * 9)) / 2), intval(($height - 15) / 2), $this->code, $black);

header('Content-type: image/jpeg');
imagejpeg($image);
imagedestroy($image);

}

}

?>
Utilizzare questa classe è alquanto semplice: poniamo infatti di dover usare una pagina php per la registrazione dell'utente chiamata register.php. Questa pagina avrà un form che invierà i dati alla pagina stessa, dopo il submit dell'utente.

Abbiamo bisogno di una ulteriore pagina, chiamata immagineCaptcha.php.
Tra i campi che andremo a controllare, ci sarà anche il codice captcha, salvato in una variabile di sessione. Per spiegarmi meglio, immagineCaptcha.php sarà così composto:
<?php

session_start();
include("captcha.php");
$c = new Captcha();

// Si salva il getCode in sessione
$_SESSION['code'] = $c->getCode();

$c->showImage();
?>

Nella pagina register.php, ci sarà sia il form che il controllo del form stesso:
<?php

session_start();

if(isset($_POST['email'])) {
//Form inviato
if($_SESSION['code']==$_POST['code']) {
//controllo captcha andato a buon fine
//qui funzione di registrazione
}
}
else {
//Mostro il form
?>

<form method="post" action="register.php">
<input type="text" name="email"/>
<input type="text" name="code"/>
<img src="immagineCaptcha.php"/>
<input type="submit"/>
</form>

<?php }

?>

giovedì 26 novembre 2009

Image Zoom con MooTools

Ho trovato un interessante articolo per creare un effetto "zoom": per intenderci, quello con una miniatura da cui si sceglie, con il mouse, l'area da ingrandire e l'immagine zoomata che riflette la scelta precedente.
Nella figura sottostante è possibile vedere l'esempio concreto:
Il codice, che si basa sulla libreria MooTools, è scaricabile all'indirizzo: http://www.php-help.ro/mootools-12-javascript-examples/mootools-12-javascript-image-zoom/

venerdì 13 novembre 2009

Touch MyTable sul Corriere di Rimini

Oggi ho avuto una piacevole scoperta leggendo il giornale...

Tutta riminese la nuova rivoluzione nel mondo della ristorazione :-)

giovedì 10 settembre 2009

Apt - informazioni e versione dei pacchetti

Un tips veloce veloce: per visualizzare la versione di un determinato pacchetto che ci apprestiamo ad installare via apt-get (per sistemi debian-based, tra cui ubuntu) basta un semplice:

apt-cache show nome-pacchetto

Ad esempio, per il pacchetto apache2 risulta:

$ apt-cache show apache2

Package: apache2

Priority: optional
Section: web
Installed-Size: 100
Maintainer: Ubuntu Core Developers

Original-Maintainer: Debian Apache Maintainers

Architecture: all
Version: 2.2.8-1ubuntu0.11
Depends: apache2-mpm-worker (>= 2.2.8-1ubuntu0.11) | apache2-mpm-prefork (>= 2.2.8-1ubuntu0.11) | apache2-mpm-event (>= 2.2.8-1ubuntu0.11)
Filename: pool/main/a/apache2/apache2_2.2.8-1ubuntu0.11_all.deb
Size: 45558
MD5sum: 987ba9930246a975044ff9424381808b
SHA1: 1a64fada82c96c165b0b5929a0bb1cf3d4b31c20
SHA256: 1e48402e87d17cea64dfba4ecaf40c31c22e98a40f44d1771157de534af70f3d
Description: Next generation, scalable, extendable web server
Apache v2 is the next generation of the omnipresent Apache web server. This
version - a total rewrite - introduces many new improvements, such as
threading, a new API, IPv6 support, request/response filtering, and more.
Homepage: http://httpd.apache.org/
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu
Task: lamp-server

Package: apache2
Priority: optional
Section: web
Installed-Size: 100
Maintainer: Ubuntu Core Developers

Original-Maintainer: Debian Apache Maintainers

Architecture: all
Version: 2.2.8-1
Depends: apache2-mpm-worker (>= 2.2.8-1) | apache2-mpm-prefork (>= 2.2.8-1) | apache2-mpm-event (>= 2.2.8-1)
Filename: pool/main/a/apache2/apache2_2.2.8-1_all.deb
Size: 43978
MD5sum: b844d8196f279fa7d46007b2e8e862a9
SHA1: d09cb634bec34627415098f3b79e7a7f186ed8f5
SHA256: 62d235c87f7be5006099f803261fb6f7a77778e4601004f963c5e66695321bd9
Description-it: Web server di prossima generazione, scalabile ed estendibile
Apache v2 è la nuova versione dell'onnipresente server web Apache. Questa versione, totalmente riscritta, introduce parecchi nuovi miglioramenti come il threading, una nuova API, supporto IPv6, filtro richiesta/risposta e molto altro.
Homepage: http://httpd.apache.org/
Bugs: mailto:ubuntu-users@lists.ubuntu.com
Origin: Ubuntu
Task: lamp-server

venerdì 14 agosto 2009

Gimp - Immagini in bianco e nero con soggetti a colori

Ultimamente mi sollazzo spesso con Gimp. Di seguito alcune istruzioni su come modificare una foto (inizialmente a colori) con lo sfondo in bianco e nero, e il soggetto a colori.
  • Aprite la foto (immagine da FreeDigitalPhotos.net).
  • Nella finestra livelli, click con il destro e poi duplica livello, che chiameremo BN.
  • Nel nuovo livello (sopra il vecchio livello) scegliere Colore e poi Desaturazione. Si può scegliere tra lucentezza, luminosità, media (io ho scelto la seconda). Cliccare con il destro sul livello "BN" e scegliere aggiungi canale alpha.
  • Ora, con la gomma (Maiusc + E) cominciate, con pazienza, a cancellare dal livello BN le parti che volete vengano a colori. All'inizio fatelo grossolanamente, poi più dettagliatamente nei bordi. Potete anche farvi aiutare dai vari strumenti di selezione di Gimp e giocare con lo zoom (Visualizza - Zoom).
Il risultato (con più calma e pazienza viene chiaramente meglio, io l'ho fatto a casaccio!)

lunedì 29 giugno 2009

Endian - un firewall semplice e completo

Endian Firewall Community

Ho avuto la necessità qualche giorno fa, di preparare un firewall perimetrale per un'azienda. A differenza però dell'approccio standard, il focus principale non era sulla sicurezza dall'esterno verso l'interno (che comunque è importante, come IDS eccetera) ma era sul filtrare il comportamento degli utenti verso internet.
L'esperienza mi ha diretto verso le classiche IpCop / Smoothwall e compagnia bella, ma queste sono tutte non nativamente incentrate sul controllo dell'utente.
Fortunatamente ho trovato Endian Firewall, una creazione di una azienda italiana molto promettente. Di base il loro business si basa (a quanto ho capito) sulle appliance, ma distribuiscono una versione community della loro distribuzione Linux.
Nativamente Endian ha una semplice gestione del traffico in uscita, permettendo con pochi click di gestire i servizi che si vogliono permettere (ad esempio deve essere possibile navigare su porta 80, 443 https eccetera).
Un altro fondamentale punto a favore è la presenza di una semplice interfaccia verso squid + dansguardian, il proxy http che analizza anche il contenuto delle pagine visitate e blocca il traffico a seconda di un determinato punteggio ottenuto dalla pagina stessa, calcolato sulla base di parole chiave specificate. E' inoltre possibile utilizzare blacklist e whitelist.
Endian è anche proxy ftp, smtp eccetera. Ha anche il servizio antivirus (ClamAV), Snort per il rilevamento intrusioni, può fare da time server e da server DHCP.

In poche parole è semplice e ha tutto quello di cui avevo bisogno.

Consigliata!

domenica 7 giugno 2009

Duke Nukem 3D per Linux - Eduke32


Un bel po' di tempo fa, con le lacrime agli occhi, ho finalmente rispolverato un mio vecchio amore... Duke Nukem 3D! Quel gioco mi aveva fatto impazzire (anche per le mappe che mi preparavo da solo con l'editor), assolutamente straordinario e rivoluzionario per l'epoca in cui è uscito.
Vale la regola "non si butta via niente" quindi ecco spuntare, dopo il rilascio del codice sorgente aperto, eduke32, "an open source Duke Nukem 3D port".
L'installazione è semplice:

sudo apt-get install eduke32

Unica cosa da fare: avere il cd originale (oppure un qualsiasi file grp gratuito, ad esempio la versione shareware) contentente i file di gioco (di cui il più importante è senza dubbio duke3d.grp, che contiene le mappe, i suoni, le artwork eccetera del gioco!).
Questi file di gioco devono essere copiati nella cartella .eduke32 sotto la home dell'utente che state usando, quindi ad esempio per me è:
/home/stefano/.eduke32
o semplicemente
~/.eduke32
Sempre in questa cartella andranno posizionati, opzionalmente, i file delle mappe che potrete scaricare da internet (cercare con google "duke nukem 3d map" per credere!).

Buon divertimento!