La problématique des développeurs nomades

Je suis souvent amené, dans mon activité de développeur, de ramener du travail chez moi ou à travailler en déplacement. La solution que j’ai mise en place est d’embarquer mon environnement de développement complet sur un disque dur USB…

Au départ, j’ai utilisé CoLinux pour virtualiser une distribution Debian que je pilotais via un programme disposé dans la barre de tâches Windows. Ce programme me permettait de configurer certains paramètres du système de virtualisation (redirections des ports, démarrage automatique, etc.), et de démarrer ou d’arrêter manuellement la machine virtuel. Le problème c’est que CoLinux n’est pas compatible avec les architectures 64 bits. J’ai donc dû reconcevoir l’architecture en me basant sur le système de virtualisation VirtualBox, de SUN. Je travaille avec cette solution depuis maintenant plusieurs semaines et je me régale ! Plus besoin de synchroniser mon code avec les repositories SVN, de mettre à jour base de données et librairies de code… tout est là, tout le temps, que je sois connecté au net ou non !

Je pense donc faire un pack complet de cette solution très prochainement pour vous en faire bénéficier. En attendant, en voici un petit descriptif :

- Distribution Ubuntu Server 9.04
- Additions VirtualBox pré installées
- Paquet Apache 2, PHP 5, MySQL et serveur Samba préinstallés et configurés
- Autorun à placer à la racine du disque dur externe (permettant de lancer le starter et la machine virtuelle)

Pour accéder au document root d’Apache depuis l’hôte Windows, vous pourrez monter un disque réseau sur \\192.168.56.110\www, que vous ayez une connexion réseau ou non !

L’installation préalable de VirtualBox sera nécessaire, et je vous proposerai également mon « starter » permettant de piloter la machine virtuelle :

starter-2 starter-2

Sécuriser ses formulaires Zend_Form

La sécurité dans vos applications doit faire l’objet d’une attention particulière et permanente. Cet aspect dans la conception d’une solution et souvent négligé pour des raison de temps et d’économie.Il existe pourtant des solutions simples pour se protéger d’attaques comme les XSS ou, comme le montre la solution ci-dessous, des Spoofed Forms.

Cet exemple implémente une classe générique étendant Zend_Form et intégrant dynamiquement la génération et la vérification d’un token, certifiant ainsi que les données postées proviennent bien de votre formulaire :

class App_Form extends Zend_Form
{
    /**
     * @var Zend_Session_Namespace
     */
    protected $_session;

    public function __construct( $options = null )
    {
        parent::__construct( $options );
        $this -> _session = new Zend_Session_Namespace('default'); 

        // Automatically add a security token field
        $tokenField = new Zend_Form_Element_Hidden('__token');
        $this -> addElement($tokenField);
    }

    public function __toString()
    {
        // Generate a token for this form
        $token = md5(uniqid(''));
        $this -> getElement('__token') -> setValue( $token );
        $this -> _session -> { $this -> _tokenName() } = $token;

        return parent::__toString();
    }

    /**
     * Get the form token index in the session namespace
     *
     * @return string
     */
    private function _tokenName()
    {
        return strtolower(get_class($this)).'.token';
    }

    /**
     * Validate the form
     *
     * @param  array $data
     * @return boolean
     */
    public function isValid($data)
    {
        $valid = parent::isValid( $data );

        // Check the security token
        if( $this -> _session -> { $this -> _tokenName() } !== $data[ '__token' ])
        {
            $this -> addErrorMessage('Invalid token provided');
            $valid = false;

        }

        // Invalidate the generated token
        unset( $this -> _session -> { $this -> _tokenName() } );
        return $valid;
    }

}