C4ptch@

De temps à autre, il m’arrive de regarder un peu sous le capot des sites web que je visite, de plonger dans le code pour m’intéresser à l’un ou l’autre composant du site. Dernièrement, j’ai donc été attiré par la partie captcha de l’un d’eux.

captchaDès le premier coup d’œil, je pressens une faille. Quelques actualisations de page plus tard, ma première impression se confirme, le nom donné aux images représentant les différents chiffres du captcha ne changent pas. Il suffit donc d’établir la correspondance entre nom d’image et chiffre et nous devenons capable de déterminer le captcha automatiquement.

En regardant d’un peu plus près l’identifiant de chaque image, je m’aperçois également que celui-ci fait 32 caractères de long. Résumons: 32 caractères, lettres minuscules de a à z et chiffres de 0 à 9. Qui a dit md5? Un petit test pour s’en convaincre. L’image correspondant au 0 a pour identifiant cfcd208495d565ef66e7dff9f98764da, ce qui correspond bien au hash md5 de 0.

Cette constatation m’a donc fait réfléchir à la question suivante: si il est possible de casser un captcha en apprenant la règle spécifique à un programme, ce mécanisme de captcha est-il toujours valable, au sens où il a fallu une intervention humaine pour écrire la règle?

Revenons donc sur la définition d’un captcha par Wikipédia: « A CAPTCHA (an acronym for « Completely Automated Public Turing test to tell Computers and Humans Apart ») is a type of challenge-response test used in computing to determine whether or not the user is human. ». On y apprend qu’un captcha doit permettre de déterminer si un utilisateur est humain ou non. Donc, le mécanisme de captcha étudié n’est pas valable, puisqu’un programme relativement simple est capable de résoudre le défi. Bien entendu, il aura fallu qu’un humain écrive la façon de résoudre ce captcha en particulier (,mais après tout, il y a un humain derrière chaque ligne de code). De plus, on peut très bien écrire un programme capable de reconnaître lorsqu’un site utilise ce type de captcha et ainsi s’affranchir d’une intervention humaine pour chaque site utilisant ce mécanisme de captcha.

Pour terminer, j’ai continué mes recherches et avec les bons mot-clés, j’ai donc constaté que ce type de captcha utilisant un hash md5 comme identifiant d’image se retrouve sur quelques sites mais ne semble pas être trop répandu. On peut néanmoins déplorer que la page sur laquelle j’ai découvert ce captcha soit celle de contact d’une commune française de taille moyenne.

cURL Options utiles

--cookie-jar cookie.txt

Option permettant de récupérer les éventuels cookies envoyés avec la réponse du serveur en les stockant dans le fichier passé en paramètre.

--cookie cookie.tx

Permet de spécifier l’utilisation du cookie stocké dans le fichier passé en paramètre.

--user utilisateur:motdepasse

Utile pour signaler à curl d’utiliser un utilisateur et un mot de passe.

-i --include

Permet d’afficher les headers de la réponse en plus du reste du document.

--basic

Indique à curl d’utiliser de l’authentification HTTP Basic (Option par défaut, donc pas forcément nécessaire sauf pour écraser une précédente option d’authentification.

Astuces ezPDF PHP

Si vous lisez ceci… vous êtes surement entrain de galérer à afficher des accents ou caractères spéciaux avec un éditeur de PDF en PHP (ici ezPDF).

  • La première astuce est pour l’affichage du sigle €.

Essayez cette ligne :

$euro = iconv("UTF-8", "CP1252", "€");

La variable euro contiendra votre sigle euro affichable correctement sur le PDF ;)

 

  • La deuxième astuce est pour tout vos accents, sigles, etc :
$coeur = iconv("UTF-8", "CP1252", "œ");

$texte = "N°9: Ô mage aztèque, l'écuyer vêtu d'un kit hawaïen et de bijoux reçut au c".$coeur."ur l'âcre piqûre, de l'île où arrive son frêle canoë.");";

$bizarrerie = array('é', 'à', "'", 'ê', 'è', '°', 'Ô', 'ï', 'ç', 'â', 'û', 'î', 'ù', 'ë');

$remplacementBizzarerie = array(utf8_decode('é'),utf8_decode('à'),utf8_decode("'"),utf8_decode('ê'),utf8_decode('è'), utf8_decode('°'), utf8_decode('Ô'), utf8_decode('ï'), utf8_decode('ç'), utf8_decode('â'), utf8_decode('û'), utf8_decode('î'), utf8_decode('ù'), utf8_decode('ë'));

$texte = str_replace($bizarrerie , $remplacementBizzarerie , $texte);

Affichez votre texte sur le PDF et admirez :)

$texteSource

 

Movim: Essai d’installation

Dernièrement, j’ai décidé de voir ce que propose les réseaux sociaux alternatifs libres. Ayant eu l’occasion d’assister à une conférence sur Movim et de d’échanger rapidement avec son concepteur, je me suis donc décidé à tenter l’installation complète. Pour cela, j’ai choisi le serveur xmpp Prosody, qui embarque un serveur Bosh nécessaire pour traduire les requêtes entre les protocoles http et xmpp. Nous allons donc commencer par là.

Prosody

L’installation s’effectue via le gestionnaire de paquets (ici, aptitude) :

aptitude install prosody

Une fois Prosody installé, on se tourne vers la configuration de la bête en modifiant le fichier /etc/prosody/prosody.cfg.lua. Les modifications intéressantes sont les suivantes, à adapté selon vos besoins bien sûr.

"bosh"; -- Enable BOSH clients, aka "Jabber over HTTP"
allow_registration = false;

VirtualHost "domain.com"
        enabled = true

cross_domain_bosh = true

Le mode d’authentification doit rester en internal_plain, le changer empêche de se logger correctement. Nous pouvons dès à présent redémarrer le service pour que la configuration soit appliquer :

service prosody restart

A présent, ajoutons un utilisateur :

prosodyctl adduser user@domain.com

Pour supprimer un utilisateur si besoin :

prosodyctl deluser user@domain.com

Les comptes utilisateurs relatifs aux différents domaines sont stockés dans /var/lib/prosody/. Voilà pour la partie relative à Prosody, à ce stade, il est normalement possible de se connecter à un salon de discussion xmpp en utilisant l’utilisateur ajouté tout à l’heure.

Movim

Nous passons ensuite à l’installation de Movim à proprement parler. J’ai d’abord essayer de récupérer directement les sources à partir de la branche master, mais un fichier de dépendance était manquant et empêchait le fonctionnement de l’application. Je me suis donc tourné vers la version 7.2.

On change ensuite le propriétaire de l’arborescence  du dossier movim pour que celui-ci soit utilisable par Apache.

chown -R www-data:www-data movim

Il est maintenant temps de modifier la configuration de movim, soit le fichier movim/config/conf.php, et notamment les champs suivants :

'environment' => 'production',
'dbType' => 'mysql',
'dbUsername' => 'movim',
'dbPassword' => 'password',
'dbHost' => 'localhost',
'dbPort' => '3306',
'dbName' => 'movim',
'boshUrl' => 'http://domain.com:5280/http-bind',

On aura bien entendu pris soin de créer au préalable l’utilisateur et la base de donnée MySQL qui convient.

mysql -p -u root
  mysql> CREATE DATABASE movim;
  mysql> GRANT ALL PRIVILEGES ON `movim`.* TO 'movim'@'localhost' \
    IDENTIFIED BY 'password';

Apache

Pour rendre tout cela accessible, il nous faut maintenant configurer Apache. Soit le fichier movim dans /etc/apache2/sites-available/.

<VirtualHost *:80>
      ServerAdmin webmaster@localhost
      ServerName movim.domain.com
      DocumentRoot /var/www/movim
      <Directory />
              Options FollowSymLinks
              AllowOverride None
      </Directory>
      <Directory /var/www/movim>
              Options Indexes FollowSymLinks MultiViews
              AllowOverride All
              Order allow,deny
              allow from ALL
      </Directory>
</VirtualHost>

Puis les commandes habituelles :

a2ensite movim
service apache2 restart

Suite et fin

Movim est désormais accessible sur movim.domain.com. Un petit tour dans l’interface d’admin du nœud est nécessaire pour s’assurer que tout fonctionne correctement et initialiser la base de donnée. Les identifiants de connexion sont ceux configurés dans le fichier de configuration de movim.

Résultat, nous pouvons nous connecter à notre nœud movim grâce au compte xmpp que nous avons créé précédemment. L’ensemble est bien vide, puisque nous sommes seuls sur le nœud. En essayant diverses fonctionnalités, j’obtiens de temps à autre des messages d’erreur sur la gauche de mon écran. Comme je n’utilise pas la dernière version, je n’ai pas vraiment creusé pour savoir si cela provient de movim ou de mon serveur Prosody. J’arrive par contre à faire communiquer deux utilisateurs entre eux via le chat intégré.

Bilan mitigé, « I have mixed feelings » comme disent les anglais. Movim a un potentiel certain, néanmoins, l’installation de sa propre instance complète Movim et serveur xmpp n’est pas de tout repos. La procédure d’installation est très limitée en ce qui concerne la partie xmpp. J’avais pourtant le souvenir d’une documentation beaucoup plus complète des différentes solutions disponibles lors de mon premier passage sur le wiki il y a de cela plusieurs mois. Je partage donc les quelques étapes que j’ai suivi pour l’installation de Movim. L’ensemble est plus ou moins complet et pourrait servir de base à toute personne cherchant à tester l’application.