Auditer son site web avec skipfish

Posté par seiyar81 le 8 avril 2010 | Laisser un commentaire (2)
skipfish

La sécurité est une des principales préoccupations des entreprises concernant leurs données. La sécurité passe par la protection des données, la capacité à se protéger contre les attaques, les intrusions etc…

De nombreuses applications payantes existent et permettent d’auditer des sites web comme Nikto ou Nessus. Ces logiciels sont puissants mais skipfish possède un avantage sur ses concurrents :

“Il est rapide et consomme très peu de ressources !”

En effet la documentation annonce plus de 500 requêtes par secondes sur Internet, 2000 via un LAN et 7000 en local, tout ceci avec un processeur apparemment modeste. Tout ceci grâce à une bonne gestion du protocole HTTP 1.1, aux appels réseaux asynchrones et enfin grâce l’implémentation en C du logiciel.

On peut lui passer un bon nombre d’options comme refuser les cookies, ne pas scanner tel sous-domaine, le nombre maximum de connexions TCP etc…
Skipfish génère ensuite un fichier HTML très simple et agréable à utiliser. On repère ainsi facilement les erreurs, qui sont d’ailleurs plutôt bien détaillées.

Concernant le logiciel lui-même, il est développé par Michal Zalewski, un développeur polonais pour le compte de Google, et il est disponible sous license Apache 2.0

Pour l’installer, il suffit de récupérer l’achive tarball puis ensuite :

tar -xzf skipfish-1.29b.tgz
// On compile
make
// Si vous obtenez des erreurs c'est probablement qu'il vous manque des paquets
sudo apt-get install libidn11 libidn11-dev libssl0.9.8 libssl-dev zlib1g zlin1g-dev

// Si l'installation se déroule bien vous obtenez ce message
See dictionaries/README-FIRST to pick a dictionary for the tool.

Having problems with your scans? Be sure to visit:

http://code.google.com/p/skipfish/wiki/KnownIssues

Une fois ceci fait, vous pouvez examiner la doc et surtout l’aide pour les différentes options.

Catégorie: Internet, Linux | Laisser un commentaire (2)

Programmer un envoi de SMS avec le Zend Framework et Google Agenda

Posté par seiyar81 le 22 mars 2010 | Laisser un commentaire (5)
Google Agenda

Si vous développez déjà avec le Zend Framework vous devez connaître ou avoir entendu parler de Zend_Gdata. C’est, comme son nom l’indique, un ensemble de classes qui permettent l’accès aux services en ligne de Google (Google Data API). On a ainsi accès à :

Aujourd’hui je vais expliquer comment se servir de Zend_Gdata pour communiquer avec Google Agenda. Si vous en connaissez le fonctionnement, vous savez qu’on peut définir des rappels pour les rendez-vous de trois façons : Email, Pop-up ou SMS.

C’est au SMS que nous nous intéresseront, en effet, utiliser Google Agenda pour l’envoi de SMS ne vous coutera pas un centime !

Pré-requis

Vous devez avant tout disposer de :

  • Un compte Google
  • Un agenda activé dans Google Agenda
  • Un numéro de portable associé au compte Google Agenda et vérifié
  • La dernière version du Zend Framework disponible ici
  • Un serveur HTTP avec le support de PHP (peut-être pas besoin de le préciser mais on ne sait jamais :p )

Mise en situation (enfin essai ^^)

C’est bien joli d’écrire ce tutoriel mais sans un exemple pratique il peut être difficile d’en voir l’intérêt.

Imaginez que vous développez pour une entreprise qui installe et gère le fonctionnement de panneaux solaires (vous pouvez remplacer panneaux solaires par chaudières, fenêtres, voire même par l’adoption de poissons rouges birmans, si si ça marche aussi !).

Imaginez maintenant que vos clients aient la possibilité via une interface web de créer des “tickets”, ou “alertes” comme vous le sentez, dès lors qu’ils rencontrent un problème auquel ils ne peuvent faire face seuls !

C’est alors que par malheur, vous n’êtes pas joignable au bureau et le client n’a pas votre numéro de portable (si si c’est possible) ! Drâme ! Horreur ! Comment faire ?

Et bien tout simplement en créant un évènement sur votre Google Agenda avec l’option “reminder by SMS” !

Formulaire

Vous créez donc un formulaire pour que vos clients puissent expliquer en quelques lignes ce qui se passe avec en bonus une liste pour choisir la priorité du ticket.

class Default_Form_Ticket extends Zend_Form
{
    public function __construct($sitesList, $options = null)
    {
        parent::__construct($options);
        $this->setName('ticket_form');
        $this->setAction('/tickets/new')
     	->setMethod('post');
     	$this->setDecorators(array(
	    'FormElements',
	    array('HtmlTag', array('tag' => 'table')),
	    'Form',
		));

        $title = new Zend_Form_Element_Text('title');
        $title->setLabel('Sujet : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->setAttrib('size', '50')
        ->addValidator('NotEmpty');
        $title->setDecorators(array(
	    'ViewHelper',
	    'Errors',
	    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element-input')),
	    array('Label', array('tag' => 'td'), array('tag' => 'td', 'placement' => 'prepend')),
	    array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
		));

        $priority = new Zend_Form_Element_Select('priority');
        $priority->setLabel('Priorité : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->addValidator('NotEmpty');
        $priority->addMultiOptions(array('Basse'=>'Basse', 'Normale'=>'Normale', 'Haute'=>'Haute', 'Urgente'=>'Urgente'));
        $priority->setDecorators(array(
	    'ViewHelper',
	    'Errors',
	    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element-input')),
	    array('Label', array('tag' => 'td'), array('tag' => 'td', 'placement' => 'prepend')),
	    array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
		));

        $message = new Zend_Form_Element_Textarea('message');
        $message->setLabel('Message : ')
        ->setRequired(true)
        ->addFilter('StripTags')
        ->addFilter('StringTrim')
        ->setAttrib('cols', '50')->setAttrib('rows', '15')
        ->addValidator('NotEmpty');
        $message->setDecorators(array(
	    'ViewHelper',
	    'Errors',
	    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element-input')),
	    array('Label', array('tag' => 'td'), array('tag' => 'td', 'placement' => 'prepend')),
	    array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
		));

        $submit = new Zend_Form_Element_Submit('Soumettre');
        $submit->setAttrib('id', 'submitbutton');
        $submit->setValue('Soumettre');
        $submit->setDecorators(array(
	    'ViewHelper',
	    array(array('data' => 'HtmlTag'), array('tag' => 'td', 'class' => 'element-submit')),
	    array(array('label' => 'HtmlTag'), array('tag' => 'td', 'placement' => 'prepend')),
	    array(array('row' => 'HtmlTag'), array('tag' => 'tr')),
		));

        $this->addElements(array($title, $priority, $message, $submit));
    }
}

Ensuite dans le contrôlleur on instancie le formulaire et on l’ajoute à la vue et dans le même temps on met en place le code pour la création de l’évènement.

    public function newAction() {
        $form = new Default_Form_Ticket($sitesList);

        if($this->_request->isPost() && $form->isValid($_POST)) {
            try {
	    /*
		Vous pouvez enregistrer le ticket dans une base de données.
		Nous nous contenterons simplement de l'ajout de l'évènement.
	    */

            $title = 'New Ticket - '.$this->view->user->mail.' - ' . $_POST['title'];
            $message = $_POST['message'];

            $this->createAgendaEvent($title, $message);

            $this->_redirect('/tickets');
            } catch(Exception $e) {
                $this->view->error = 'Une erreur est survenue pendant la création du ticket.';
            }

        }
        $form->populate($_POST);
        $this->view->form = $form;
    }

Il ne nous reste plus qu’à implémenter la fonction createAgendaEvent. Un petit détail toutefois avant de commencer, le reminder se déclenche au minimum 5 min avant le début de l’évènement. Nous créerons donc un évènement à H+6min.

    public function createAgendaEvent($title, $message) {
	// On charge toutes les classes qui vont nous servir
        Zend_Loader::loadClass("Zend_Gdata");
        Zend_Loader::loadClass("Zend_Gdata_ClientLogin");
        Zend_Loader::loadClass("Zend_Gdata_Calendar");
        // On récupère le nom du service
        $service = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;

        // On s'authentifie
        $client = Zend_Gdata_ClientLogin::getHttpClient('IDENTIFIANT_COMPTE_GOOGLE', 'PASSWORD_COMPTE_GOOGLE', $service);

        // On crée un nouvel objet Calendar
        $calendar = new Zend_Gdata_Calendar($client);

        // On lui ajoute un évènement
        $event = $calendar->newEventEntry();

        // On met en place le reminder
        $reminder = $calendar->newReminder();
        $reminder->method = "sms";
        $reminder->minutes = "5";

        // Date de début à H+6min
        $startDate     = date("Y-m-d");
        $startTime     = date("H:i", time() + 6*60);
        // Date de fin à H+7min
        $endDate     = date("Y-m-d");
        $endTime     = date("H:i", time() + 7*60);
        // Offset GMT+01 pour Paris
        $tzOffset     = "+01";

        // On assigne tout ça au calendrier
        $when = $calendar->newWhen();
        $when->startTime = "{$startDate}T{$startTime}:00.000{$tzOffset}:00";
        $when->endTime = "{$endDate}T{$endTime}:00.000{$tzOffset}:00";
        $when->reminders = array($reminder);
        $event->when = array($when);

        // Enfin on ajoute le titre et le message
        $event->title = $calendar->newTitle($title);
        $event->content = $calendar->newContent($message);

        // Et on envoit le tout à Google Calendar
        $newEvent = $calendar->insertEvent($event, "http://www.google.com/calendar/feeds/IDENTIFIANT_COMPTE_GOOGLE/private/full");
    }

Et là, comme par magie vous recevrez une minute plus tard (oui H+6min – 5min = 1min !) un gentil SMS de Google avec le titre de l’évènement.
Si c’est pas beau ça :)

J’espère que ce tutoriel vous aura plu et/ou servi, je continue avec d’autres articles sur le Zend Framework très bientôt.

Catégorie: Développement Web, PHP, Zend Framework | Laisser un commentaire (5)

Le nouveau design de Google !

Posté par seiyar81 le 26 novembre 2009 | Laisser un commentaire (0)

Confirmation que Google travaille activement à mettre en place un nouveau design pour sa page d’accueil, il est possible de l’activer grâce à un simple cookie.

Tout d’abord se rendre sur Google.com.

Ensuite copier-coller le code javascript suivant dans la barre d’adresse de votre navigateur et validez.

javascript:void(document.cookie="PREF=ID=20b6e4c2f44943bb:
U=4bf292d46faad806:TM=1249677602:
LM=1257919388:S=odm0Ys-53ZueXfZG;path=/; domain=.google.com");

Rafraîchissez la page de Google.com, repassez sur la version anglaise si vous êtes en français par défaut et ‘admirez’ le résultat.

Les nouveaux logos :

Google

GMail

Catégorie: Brèves, Internet | Laisser un commentaire (0)

Chrome OS : la présentation

Posté par seiyar81 le 19 novembre 2009 | Laisser un commentaire (0)

Google a rendu public le code source de Chromium OS, système d’exploitation open-source destiné à devenir Chrome OS.

Le code source est disponible au téléchargement ici : Code Source
ou via un dépôt Git.

Tout est expliqué sur le blog de Google : Blog

Enfin un article résume la sortie de l’OS : Article

Au premières nouvelles donc et en vrac :

- Les disques durs seraient écartés au profit d’autre(s) type(s) de stockage : in the cloud, mémoire flash ? On ne sait pas encore pour l’instant.

- Toutes les applications sont des applications en ligne, tout se passe donc via la navigateur, aucune application de bureau

- Conséquence directe de ceci et pour des raisons de sécurité évidentes, Chrome OS ne fera pas confiance par défaut aux applications

- A chaque redémarrage, Chrome OS vérifiera l’intégrité de son code, et s’il a été compromis par un virus ou autre il sera à même de se réparer tout seul.

- Lorsque l’utilisateur voudra se connecter, Chrome OS va tenter de récupérer le compte Google associé, sinon il cherchera un compte local et à chaque connexion réussie en ligne, les identifiants seront mis en cache.

- Les plugins du navigateur auront un processus dédié.

- Mises à jour automatiques sans intervention de l’utilisateur, via HTTPS et signés par le serveur de mises à jours.

Et plein de choses très intéressantes et qui nous laissent présager que Chrome OS sera un système d’exploitation très intéressant !

Pour plus de lecture, plusieurs documents sont en ligne pour expliquer le fonctionnement de l’OS : Chromium OS.

Et pour les plus anglophone une petite vidéo de 3 minutes présentant Chrome OS :

Le lien direct : http://www.youtube.com/watch?v=0QRO3gKj3qw

Catégorie: Internet, Linux | Laisser un commentaire (0)