Plugin WordPress pour bloquer les tentatives d’intrusion (et les spams de commentaires?)

Si comme moi, vous avez un site qui tourne sous WordPress, vous avez probablement des dizaines de tentatives d’intrusion par jour.

Pendant un temps, j’ai utilisé le plugin All in one WordPress Security. Il bloque les adresses IP après 3 tentatives de login infructueuses, et vous envoie une notification. C’est très bien mais je l’ai trouvé un peu trop lourd pour ce que je cherchais à faire, à savoir sécuriser ma page de login.

Ne trouvant pas de solution simple pour masquer cette putain de page, j’ai décidé d’écrire mon propre plugin qui fait le boulot. C’était l’occasion d’apprendre à développer des plugins WordPress, hé bien ce n’est pas si compliqué que ça en a l’air! Accessoirement, il bloque aussi les appels XML-RPC. Et comme side effect non prévu et très intéressant, les spams de commentaires… Je ne sais pas pourquoi, mais c’est ce que je constate chez moi en tout cas 🙂

Pour la petite histoire, j’ai tenté de le vendre via la plateforme codecanyon (je ne mets pas le lien, c’est volontaire car à mon humble avis ce sont des raclures). Pour ça, j’ai packagé mon petit bouzin, j’ai documenté le code à mort et je leur ai envoyé pour qu’ils l’analysent et le publient.

Deux semaines plus tard, j’ai reçu un email me disant que mon plugin a été refusé. Pourquoi? Parce que. Merci les gars pour la précision des explications, et allez vous faire empapaouter.

Alors tant pis pour la vente, je l’ai mis sous GPL2 et je l’ai publié sur Github.

Mais il marche comment ton plugin?

Le principe est très simple. Normalement, quand on veut s’authentifier sur un site WordPress, on tombe sur la page wp-login.php et on a accès au formulaire login/mot de passe.

Hé bien une fois que ce plugin est activé, il faut juste ajouter un paramètre de votre choix dans l’URL pour que la page de login soit visible. Par exemple, wp-login.php&dirty=marmotte

C’est tout. Vous pouvez essayer chez moi si vous voulez.

Vous pouvez aussi essayer d’envoyer des requêtes POST directement sur wp-login.php, même si le login/mot de passe est correct, si la clé n’est pas là ça ne passera pas;)

Et donc, je disais plus haut que ce plugin vous permet aussi de désactiver le XML-RPC, qui est un web service permettant d’effectuer des opérations sur WordPress depuis des applications tierces. C’est un vecteur important d’attaques brute force, et il est activé par défaut alors que la plupart du temps il n’est pas utile.

Et les spams de commentaires?

Alors ça, c’est le point imprévu de ce plugin.

Je soupçonne que les spambots se basent sur la présence d’une page wp-login.php pour savoir si on est sur wordpress, et à partir de là, ils savent comment poster un commentaire de façon automatique.

Ici, comme il n’y a plus de wp-admin.php standard, ils ne sauraient pas comment envoyer un commentaire. Enfin c’est mon analyse, je ne sais pas si elle est correcte… Toujours est-il que sur mon blog, j’ai zéro spam détecté par akismet, et rien en file d’attente. C’est plutôt cool du coup. N’hésitez pas à me faire un petit retour si ce n’est pas le cas chez vous, et dans ce cas je corrigerai cet article.

Voici l’archive du plugin à installer dans WordPress :
wp-login-door.zip

wp-login-door sur GitHub

Et si ce plugin vous plait, pourquoi pas faire un petit don?

A bientôt!





Fabrication de sous-verres personnalisés, gravés au laser

Comme à chaque week-end de Pâques depuis une dizaine d’années, je vais retrouver mes amis et ma famille en Limousin, et c’est toujours la bonne occasion pour se mettre une belle race 🙂

Cette année, j’ai décidé de fabriquer des sous-verres pour l’ami Geo (http://vivrealarochette.fr), et y inscrire les principales spécialités de chez lui lorsque vient Pâques.

Les sous-verres mesurent 10cm de diamètre. Je les ai découpés à la fraise de 2.5mm, et gravés avec le laser.

1. Conception

Pour la conception, j’ai utilisé Inkscape (https://inkscape.org)
J’ai dessiné mon cercle de 10cm, mis en place mes textes. Ah tiens, au passage, voici comment courber un texte dans Inkscape:
– Il faut d’abord le transformer en chemin (menu Chemin > Objet en chemin)
– Aller dans Chemin > Effets de chemin
– Cliquer sur le + pour ajouter un nouvel effet de chemin, et choisir « Courber ».
– Jouer avec les différentes méthodes de courbure (manuelle, liée à un chemin…)

Une fois que mon dessin est prêt, je l’exporte au format PNG, en noir et blanc.

inkscape

2. Découpe

Mon laser n’étant pas assez puissant pour couper du MDF de 3mm, j’ai fait la découpe avec Cambam et une fraise de 2.5mm.

3. Préparation du G-Code pour graver l’image PNG

Pour générer du G-Code à partir d’une image non vectorielle, j’ai écrit un programme en C# qui lit l’image, et écrit les commandes G-Code dans un fichier texte. Il reste des choses à perfectionner, mais il fonctionne plutôt bien 🙂

PicGCode

4. Mise à zéro de la machine pour le laser

Une fois mes disques découpés, mon G-Code préparé, il n’y a plus qu’à les graver!
Par contre, le module laser est décalé par rapport à la fraise, donc il fallait remettre les choses à zéro avant d’attaquer.
Pour ça, j’ai fait un petit G-Code à la main, qui me dessine au laser un cercle de 10cm de diamètre. Après, je n’ai plus qu’à placer mon sous-verres dans le cercle et je suis sûr de sa position 🙂

Shapeoko, préparation gravure laser
Positionnement du disque après la mise à zéro de la machine

5. A l’attaque!

Hop, la phase la plus excitante: la gravure!

Le faisceau laser m'impressionnera toujours...
Le faisceau laser m’impressionnera toujours…
Universal G-Code Sender
Universal G-Code Sender
Petite photo prise entre deux allumages du laser
Petite photo prise entre deux allumages du laser
Et voilà la série de sous-verres :)
Et voilà la série de sous-verres 🙂

6. Vernissage

Alors certains diront qu’il ne faut pas vernir un sous-verre, parce que son but premier est d’absorber les gouttes de condensation et de pinard qui pourraient couler à l’extérieur du verre. Mais super, quoi, une fois taché, ton sous-verre est… taché.
Alors j’ai pris la liberté de passer deux couches de vernis, et j’avoue que le rendu n’est pas trop dégueu. Par contre, à la lumière, en le regardant de profil, on voit quelques coups de pinceaux. Je devrai perfectionner ma technique de vernissage…

Première couche
Première couche
Seconde couche
Seconde couche

Podcasts, RSS et PHP

Oyo!

Un petit billet « copinage » pour les podcasts que j’écoute, et promo pour podcast addict, un lecteur de podcasts sur android. Vous les trouverez (en partie) dans le menu de gauche, sous « podcasts ».

Breaking news : http://www.nextinpact.com/news/98103-podcast-addict-retire-play-store-son-developpeur-cherche-solution.htm

Non mais qu’est-ce que c’est que ce bordel?? Podcast addict retiré aujourd’hui du play store pour cause de contenu pornographique… Non mais n’importe quoi les gars… Un conseil Xavier: pars sur F-Droid…

Edit : au 18.01.2016, Podcast Addict est revenu dans le play store.

Je les écoute dans la voiture; parmi eux NipSource, une très bonne équipe dont j’aimerais bien entendre le premier épisode de 2016 au passage… Un membre de cette équipe, Donkluivert, fait son propre podcast et est hébergé sur une plateforme qui ne lui permet pas de l’exporter correctement en RSS. Quand je dis correctement, c’est juste qu’un lien vers le fichier son doit être présent dans les items du flux pour qu’il soit téléchargeable par podcast addict (susmentionné:) sur ma tablette.

Bref, je voulais ajouter son podcast à mes flux et ça ne marchait pas.

Alors j’ai écrit un petit proxy en PHP qui enrichit son flux en allant extraire les liens sons depuis les pages cibles, et qui les insère dans les items du flux RSS.

Avec un petit système de cache pour ne pas envoyer trop de requêtes vers le site initial.

Le flux complet de l’ami DK est donc ici : chroniques du jeune manchot

Alors voilà, si l’un d’entre vous anime un podcast ET a des problèmes de flux RSS (je dirais probabilité… nulle?), ce proxy est pour vous!

Post processeur CamBam pour commander le laser

J’en avais assez d’utiliser Notepad++ pour ajouter mon G-Code spécifique au laser, alors je me suis intéressé au post-processing avec CamBam.

« Hé, Nico, le post processing c’est quoi?

– Ecoute bien mon petit :

En fait, CamBam effectue deux opérations à partir d’un dessin :

  1. Il génère le parcours d’outil, en fonction du diamètre de l’outil et d’autres paramètres. Cette opération reste purement virtuelle. J’entends par là « indépendante de la machine ».
  2. Il génère du G-Code à partir du parcours d’outil calculé. Ici, le programme écrit les instructions pour la machine. Et cette machine peut avoir des spécificités dans le G-Code qu’elle attend. Une certaine manière de décrire un arc, par exemple. C’est le travail du post processeur de générer les bonnes instructions pour la machine avec laquelle je vais travailler.

Je pense qu’on pourrait assimiler le parcours d’outil au code source d’un programme; le post-processeur, lui, est le compilateur spécifique pour la machine. Il en résulte un programme G-Code dont certaines instructions sont propre à cette machine.

En tout cas, c’est ma vision de la chose.

Avec CamBam, pour accéder au répertoire des post-processeurs, il faut aller dans (par défaut) : C:ProgramDataCamBamxxxpost.

On peut y trouver un certain nombre de post processeurs déjà disponibles, comme « default », « EMC2 », « Mach3″… ça parlera à certains je pense.

Alors j’ai copié le default.cbpp en laser.cbpp et j’ai attaqué.

Le premier truc qui me prenait la tête, c’est les commentaires CamBam entre parenthèses. Je ne sais pas si c’est Repetier ou Marlin, mais un des deux n’aime pas. J’ai redéfini les commentaires avec des points-virgules (avant, je le faisais avec notepad++).

Mais les deux éléments les plus importants dans le cas du laser sont:

  • StartCut : G-Code injecté en début de coupe (c’est à dire Z sous la surface du brut)
  • EndCut : G-Code injecté en fin de coupe (Z au dessus du brut)

J’ai donc ajouté ceci, d’après ce que je disais dans l’article précédent:

[code]

<StartCut>;start laser
M400
M42 P45 S255</StartCut>
<EndCut>;Stop laser
M400
M42 P45 S0</EndCut>

[/code]

Et voici un bout de G-Code généré avec ce post processeur:

[code]

G21 G90 G64 G40
G0 Z3.0
;T3 : 0.0
;T3 M6
;Gravure1
G17
M3 S1000
G0 X0.0 Y0.0
G1 F300.0 Z-0.4
;start laser
M400
M42 P45 S255
G1 F800.0 X20.0 Y20.0
;Stop laser
M400
M42 P45 S0
G0 Z3.0

[/code]

Par contre c’est bête, il y a toujours les commandes de Z… Je n’ai pas encore trouvé comment les faire sauter automatiquement, celles-là… Alors en attendant je les vire avec un petit search & replace de notepad++ en mode expressions régulières : je remplace « .*Z.* » par «  » (ne pas tenir compte des guillemets). En gros ça efface les lignes qui contiennent la lettre Z.

Télécharger le post-processeur (à renommer en .cbpp)

Planning Machine V2

Après le relatif succès de la Planning Machine, et après avoir découvert Bootstrap il y a maintenant une bonne année, j’ai décidé de faire une refonte complète de l’application. Plus jolie (même si ça reste subjectif), plus facile à maintenir, et plus intuitive.

L’inscription et la connexion se font maintenant uniquement avec OpenID (Google, Yahoo, ou n’importe quel autre provider OpenID). Cela évite de remplir un formulaire, recevoir un mail de confirmation à valider… Beaucoup plus simple.

A propos d’OpenID, sachez que je ne lis, ni ne stocke aucune information, à part évidemment l’URI unique délivrée par le provider OpenID. Quand je dis aucune, c’est vraiment aucune, pas même votre adresse mail.

Alors voilà, si vous avez des choses à planifier, c’est par là que ça se passe.

Visualiser les fichiers STL

J’ai remarqué qu’il n’était pas toujours évident d’avoir un aperçu facile et rapide d’un lot de fichiers STL.

Dans les outils que j’ai pu trouver, il faut importer chaque STL pour pouvoir le visualiser. Alors je ne me suis pas démonté, j’ai fait le mien.

On lui donne un répertoire, qu’il scanne récursivement à la recherche des fichiers STL. Le tout apparait dans une liste, et on peut rapidement passer d’un modèle à un autre sans se prendre la tête.

Le programme a été écrit en C#, et s’appuie sur la librairie VTK : un monstre outil pour visualiser tout et n’importe quoi facilement. A l’époque, je l’avais utilisé en C++ pour construire des modèles 3D à partir de séries d’images DICOM (issues d’IRM ou de scanners). Là, pour le C#, j’ai utilisé le portage Activiz.NET.

On peut afficher seulement les surfaces, surfaces et arêtes, arêtes seules, ou rien du tout (mais ça perd un peu de son intérêt).

La caméra est pilotable avec la souris :

  • clic molette + drag ->pan
  • clic gauche + drag ->rotation
  • molette -> zoom

Télécharger DirtySTL Viewer

Sources: https://github.com/toxnico/dirty-stl-viewer

dirty_stl_reader_2 dirty_stl_reader_1

Dirty Feed Reader

Récemment, une nouvelle m’a bien attristé : Google va fermer Google Reader. Et merde, me suis-je dit.

Je suis un consommateur régulier de flus RSS, et Google Reader était parfaitement adapté à mes besoins, notamment sur mon galaxy tab 2.

Je suis allé faire un tour sur le net pour voir quelles étaient les alternatives envisageables, et je suis tombé sur Feedly (dont j’avais auparavant entendu parler en bien). J’ai installé le bidule sur la tablette.

  1. Magnifique: j’entre seulement mon adresse gmail, et il m’importe tous mes flux.
  2. Je m’émerveille devant la présentation des flux. Visuellement, ça pète!
  3. J’explore un peu, et je ne comprends RIEN. Pourquoi m’affiche-t-il les articles de façon aléatoire? Ce que je veux, c’est simplement avoir la liste de mes flux, la liste des articles, et rien de plus… Feedly est trop compliqué pour moi… Visuellement superbe, mais à mes yeux inutilisable.

Ça me démangeait depuis un moment de développer mon propre lecteur de flux RSS, alors c’était l’occasion.

J’ai donc développé ce lecteur en gardant la même structure: des répertoires, et des flux rangés dedans.

A côté de ça, je me suis amusé à implémenter une authentification OpenID. Bon ok, le seul fournisseur d’identité en place est pour l’instant… Google… Mais ça marche! Plus besoin, donc, de remplir un formulaire d’inscription avec nom d’utilisateur et mot de passe. Un bon gain de temps pour se créer un compte 🙂

Je suis globalement satisfait de ce programme; il reste à peaufiner l’interface pour les tablettes et ce sera parfait!

J’ai écrit une fonction pour importer un fichier opml, histoire de récupérer la liste des flux actuels de Google Reader.

Pour ceux que ça intéresse, c’est par là!

Todo machine : la machine à gérer des listes

Voici une nouvelle application web qui va nous, vous, enfin en tout cas me aider à gérer des projets, sous forme de todo lists : la todo machine.

Le système se veut volontairement simple, avec deux niveaux : projet et tâche. Un projet contient des tâches, point.

 

En sélectionnant un projet, on voit la liste des tâches apparaitre :

Pour marquer une tâche comme terminée, il suffit de cliquer sur la petite coche verte. La tâche devient transparente et est envoyée à la fin de la liste. En cliquant à nouveau, on la réactive. Il est possible de saisir une description précise de la tâche :

 

Les tâches sont triées par ordre alphabétique, donc pour ajouter une notion de date, il suffit d’écrire par example 2012-12-05 : titre de la tâche. Pas de prise de tête.

Perso, j’ai quelques projets à gérer en parallèle, et cette petite application m’est bien utile. On n’est jamais mieux servi que par soi-même…

Evidemment, cette application a été développée dans le framework Mozaic, comme d’hab.

Ca me fait penser… Il faut que je mette à jour le wiki, car les choses ont pas mal évolué… Hop, une nouvelle tâche pour le projet Mozaic !

Je vais aussi noter de faire les traductions à l’occasion…

Tooltips html

En html, pour indiquer au navigateur qu’on veut afficher un tooltip sur un élément, on utilise habituellement l’attribut title, comme sur les liens ci-dessous.

Je n’aime pas trop l’allure des tooltips natifs proposés par les navigateur, et comme la mise en œuvre des scripts disponibles sur le net est parfois un peu hasardeuse, j’ai écrit ma propre classe d’affichage de tooltips. Elle est visuellement personnalisable avec une css.

Tout ce qu’il y a à faire, c’est de renseigner l’attribut title, comme d’hab, et d’inclure les fichiers js de prototype et tooltip.js, ainsi que la feuille de style tooltip.css

Elle est basée sur prototype.js (c’est pas gros et ça aurait pu être fait d’une pièce, mais prototype est tellement pratique).

Voici ce que ça donne.

Le tout est téléchargeable ici!

Lancement de la Planning Machine

Voilà, c’est fait. Je vous livre la machine à planifier.

Il s’agit d’une application web destinée à planifier n’importe quoi. Pour être plus clair, l’application permet aux utilisateurs de créer des objets (voitures, appartements, personnes, outillage, que sais-je?).

On peut créer pour chaque type d’objet des propriétés (marque, modèle, carburant pour les voitures, surface, nombre de pièces pour un appartement, etc).

Libre à vous de créer toutes les propriétés que vous jugerez nécessaires pour gérer vos objets.

Ensuite, il n’y a plus qu’à planifier ces objets dans un calendrier.

Les anti Google peuvent parfaitement envisager de s’en servir comme agenda en ligne personnel, d’autant plus que a planification est exportable au format iCalendar, utilisable par les appareils portables.

 

Plus d’infos ici