PROJET AUTOBLOG


BohwaZ

Archivé

Site original : BohwaZ

⇐ retour index

Lightweight PHP SMTP library

mercredi 26 septembre 2012 à 08:25

As always, I like to keep things simple and light in my code so one day I was looking for a PHP library able to send mails directly via SMTP. I still find it amazing that PHP doesn't have this feature in its standard package but hey why not. So I looked and I found some libraries from bigger frameworks like PEAR and Zend. They are good, but the PEAR Mail package depends on Net_SMTP, which depends on Socket, which depends on... You get the idea.

I like things that interact directly with standard PHP features, things that don't make a new interface for everything. For example PHP has a fairly good socket API so why bother adding an abstraction layer here?

So in a couple of hours, including some RFC reading (did you know that you can include comments in email addresses, like for example bohwaz@(oh that seems nice ! (but not as nice as emails addresses like "oh, look !"@example.tld))other.example.tld, what a nightmare that would be to parse with a regexp¹), and here it is: just a light and simple PHP SMTP library: lib.smtp.php

It's licensed under the LGPL and it can handle SSL, TLS, and SMTP-AUTH. It only sends text/plain emails in UTF-8 but <troll>who cares about HTML emails anyway?</troll>

¹ Even if I'm really supportive of the fight Stéphane Bortzmeyer is leading against the badly written email validation checks, I have to admit that it's sometimes tricky to do things right. Like here I had to extract multiple addresses from one string, and it's not easy if you don't want to use a very big and slow regexp.

Chalon dans la rue

mardi 24 juillet 2012 à 16:01
Alien N°1
Album photo complet

Sauvegarder et jouer à des jeux Wii sur disque ou clé USB

mercredi 18 juillet 2012 à 02:01

Il est possible grâce aux outils développés par la communauté de lancer de multiples applications et jeux non-validés "officiellement" par Nintendo sur Wii : des lecteurs de vidéo, des émulateurs, des jeux libres, ou même une distribution Linux. Mais il existe aussi une possibilité qui devrait exister d'origine sur chaque console : la possibilité de sauvegarder et re-jouer les sauvegardes de ses jeux Wii. Car les supports DVD ne sont pas éternels, et vu le prix d'un jeu ça serait bête de le perdre. Voici donc un petit HOW-TO sur comment sauvegarder et jouer à des jeux stockés sur une clé ou un disque dur USB sur sa Wii.

Vous aurez besoin de :

Installer le HomeBrew Channel

Pour commencer, il faut que votre Wii soit en version 4.3, pour cela, à l'écran d'accueil, cliquer sur le bouton "Options Wii" en bas à gauche, puis choisir "Paramètres Wii" (bouton de droite), et là la version apparaît en haut à droite de l'écran. Si vous avez 4.3E c'est bon, le "E" indique juste que c'est la version européenne. Si vous êtes à une version inférieure, choisissez "Mise à jour de la Wii" dans ce menu, et re-vérifiez à la fin de la mise à jour que la version est la bonne.

Ensuite, toujours dans le menu "Paramètres Wii", choisir "Internet" puis "Informations générales". Là notez bien l'adresse MAC de la console.

Rendez-vous maintenant sur le site http://please.hackmii.com/ et rentrez l'adresse MAC de voter Wii, après avoir coché la case qui correspond à votre version de console (normalement 4.3E pour l'europe), et vérifié que la case "Bundle the HackMii Installer for me!" est bien cochée. Cliquez l'un des boutons "blue" ou "red" (aucune différence).

Le site vous propose de télécharger un fichier ZIP, décompressez-le et recopiez son contenu sur votre carte SD. N'oubliez pas d'éjecter correctement la carte SD.

Insérez la carte SD dans la Wii allumée, et rendez-vous dans la messagerie (icône enveloppe en bas à droite de l'écran d'accueil). Allez au jour précédent et cliquez sur l'enveloppe rouge. Suivez ensuite les instructions, choisissez "Install Homebrew Channel" puis "Install Bootmii".

Et voilà vous avez installé le HomeBrew Channel qui vous permet déjà de télécharger et installer des centaines d'applications et jeux homebrew !

Pour pouvoir sauvegarder et lancer des jeux sauvegardés via une clé USB

Installation de Pimp My Wii

Pimp My Wii est un utilitaire bien pratique qui va se charger à votre place d'installer les IOS (versions spécifiques de l'OS de la Wii) qui sont patchées pour pouvoir lancer les jeux depuis un support qui n'est pas un DVD original.

Télécharger la dernière version, par exemple ici le 2.30. Dé-zipper le fichier, puis copier le répertoire apps sur la carte SD. Remettre la carte SD dans la Wii, et dans le Homebrew Channel choisir "Pimp My Wii" puis "Charger". Dans le menu de Pimp My Wii, choisir "Hacker sa Wii / Installation minimale", puis appuyer sur le bouton A pour valider les options proposées (ne rien modifier) jusqu'à ce que l'installation soit en cours. Cela va prendre un peu de temps pour télécharger et installer tout ça.

USB Loader GX

Ce petit utilitaire va permettre de créer et charger des sauvegardes de jeu, que ça soit depuis un disque ou une clé USB ou la carte SD.

D'abord télécharger le fichier .DOL sur le site officiel. Ensuite sur la carte SD, créer un répertoire nommé usbloader_gx dans le répertoire apps, y placer le fichier .DOL et le renommer en boot.dol.

Voilà c'est bon !

Créer une partition pour les jeux Wii

La Wii utilise un type de partition particulier pour stocker les jeux : WBFS. Il n'est pas reconnu par défaut sous Linux ou Windows, donc il faut des outils spécifiques.

Prenons le cas le plus simple, où vous voulez consacrer l'intégralité de l'espace de votre disque/clé USB aux jeux Wii, il va donc falloir procéder comme suit.

En premier il faut identifier le disque que vous voulez utiliser avec sudo fdisk -l en ligne de commande. Par exemple dans mon cas :

Disk /dev/sdc: 74.4 GB, 74355769344 bytes

Maintenant on va formater le disque en lançant sudo fdisk /dev/sdc (Attention, si vous vous trompez de lettre, et utilisez par exemple sda, vous risquez de perdre les données de votre disque principal), et dans fdisk taper o puis Entrée pour effacer toute partition existante, puis n et Entrée pour créer une nouvelle partition (choisir p pour primary puis le chiffre 1). Enfin, taper t puis Entrée et choisir le type de partition 0. Pour sauvegarder, taper w puis Entrée. Pour quitter q.

Maintenant on a une partition vierge, il faut la formater en WBFS. Pour cela installer qwbfsmanager, excellent logiciel libre de gestion de partition WBFS. Y sélectionner ensuite la partition (/dev/sdc1 dans mon cas) et la formater. Le logiciel permet aussi d'importer et exporter des ISOs des jeux dans la partition.

Optionnel : ajouter USB Loader GX au menu de la Wii

Pour ne pas avoir à passer par le HomeBrew Channel à chaque fois, on peut ajouter le USB Loader GX comme chaîne Wii. Pour cela télécharger la dernière version du Forwarder pour USB Loader GX, puis copier le fichier sur la carte SD. Mettre la carte SD dans la Wii, lancer Pimp My Wii, sélectionner "WAD" au menu, puis sélectionner "Wii SD Slot" et enfin sélectionner le fichier qu'on vient de mettre dans la carte SD, et choisir "Installer" puis quitter Pimp My Wii.

Comment stocker les mots de passe

vendredi 29 juin 2012 à 23:27

Une seule réponse possible : avec bcrypt !

Pourquoi bcrypt ? Je ne m'étendrais pas sur le sujet, d'autres l'ont déjà fait avant moi, et mieux.

Comme dis et répété depuis longtemps par mes petits camarades (et notamment mat), c'est la seule méthode qu'on devrait utiliser. Et je suis également fautif, jusqu'à quelques années j'utilisais toujours une méthode perso à base de sha1($password . $salt) mais c'est pas pareil ! Alors pourquoi ne pas déjà le faire ? Pourquoi ne pas l'avoir déjà fait depuis longtemps ? Et bien en partie car PHP ne donne pas d'accès simple à bcrypt, qu'il faut passer par la syntaxe un peu ésotérique de crypt pour y avoir accès. Mais pas de panique, c'est quand même simple à faire. Démonstration.

Premièrement nous allons hasher notre mot de passe. Pour cela nous devons générer le salt nous-même, PHP n'ayant pas de méthode native pour le faire, donc on va se baser sur un sha1 de uniqid() qui est nourri par rand(). rand() n'est pas réputé pour être un bon générateur de hasard, il vaudrait mieux utiliser directement /dev/urandom ou openssl, mais pour un cas simple rand() devrait suffire amplement, surtout avec Suhosin qui donne à rand() une vrai capacité de générer du vrai hasard.

$salt = substr(sha1(uniqid(mt_rand(), true)), 0, 22);

Ensuite nous allons hasher le mot de passe avec le salt :

$password = crypt($password, '$2a$08$' . $salt);

Nous avons donc désormais un mot de passe hashé, que nous pouvons stocker tel quel dans la base de données par exemple. Maintenant imaginons que nous voulions vérifier ce mot de passe, par exemple après que l'utilisateur l'ait entré dans un formulaire de connexion à un site ? Et bien c'est très simple, on reprends notre $password que nous avons stocké et on le donne à crypt en second argument, qui va se charger tout seul d'en extraire le salt et renvoyer un hash. Si le hash diffère du hash stocké, c'est que le mot de passe entré est erroné.

if ($password == crypt($_POST['password'], $password))
{
    echo "Connexion réussie !";
}

Et voilà, maintenant vous n'avez plus d'excuse !

Passphrase - Générer des phrases secrètes en PHP

vendredi 29 juin 2012 à 22:46

Récemment, un comic de XKCD sur la résistance des mots de passe a fait parler de lui en faisant revenir au goût du jour l'idée de Diceware, c'est-à-dire que plutôt que d'utiliser un mot de passe comme Gl0ubiBoulg4, il est probablement plus simple de tirer au hasard plusieurs mots du dictionnaire. Dans le comic de XKCD l'exemple donné est corriger cheval batterie agrafe, et effectivement ça semble plus simple.

Mais d'un point de vue sécurité qu'en est-il ? Et bien c'est beaucoup mieux. Par exemple si on dit que notre premier mot de passe ne peut contenir que des lettres et des chiffres, ainsi que par exemple des points et des virgules, cela fait que chaque caractère peut avoir 64 possibilités différentes, et 64 possibilités, ça fait 6 bits (26 lettres majuscules + 26 lettres minuscules + 10 chiffres + 2 signes de ponctuation = 64). Si le mot de passe fait 8 caractères cela donne donc 6 x 8 = 48 donc 48 bits d'entropie.

Revenons à notre phrase secrète (passphrase en anglais), elle est composée de mots issus d'une liste de 3.725 mots du dictionnaire du français fondamental. Ce qui donne presque 12 bits pour chaque mot. Une phrase au hasard de quatre mots donnera ainsi 12 x 4 = 48 donc également 48 bits d'entropie. Alors pourquoi prétendre que c'est mieux ?

Et bien très simplement nous n'utilisons quasiment jamais des mots de passe qui correspondent aux 48 bits décrits précédemment (par exemple Znq3HvGD), mais des mots de passe lisibles, avec des voyelles qui suivent des consonnes, et souvent un ou plusieurs chiffres à la fin. Par exemple Bohwaz95 correspond à cette description, tout comme ChaCho32, et cela réduit l'entropie réelle d'autant, par exemple à 28 bits. Le passage aux phrases secrètes donne donc directement une entropie 20 bits supérieure, avec une simplicité de mémorisation sans commune mesure.

Passphrase est une simple implémentation de cette idée de phrase secrète, en PHP, en un seul fichier qui comprends le dictionnaire de 3.725 mots. La bibliothèque est très simple à utiliser et est sous licence WTFPL pour pouvoir être réutilisée n'importe où.

Exemple :

<?php
require __DIR__ . '/lib.passphrase.french.php';
echo Passphrase::generate(4); // Nombre de mots à générer
?>

À télécharger ici : http://svn.kd2.org/svn/misc/libs/i18n/passphrase/

À noter que Passphrase est utilisé pour suggérer des mots de passe par défaut dans Garradin.