Première rédaction de cet article le 15 mai 2007
Dernière mise à jour le 21 septembre 2010
Le service Signal Spam permet aux utilisateurs de signaler les spams reçus, dans l'espoir (très ténu) qu'ils soient traités par la police ou la justice. Comment utiliser ce service depuis Unix ?
Signal Spam fournit deux greffons, pour les
MUA Outlook et
Thunderbird. Mais j'utilise
mutt voire des scripts
semi-automatiques. Signal Spam n'avait pas au début
d'API
documentée (elle est apparue
par la suite et semble avoir été supprimée après, signe très clair du
manque de suite dans les idées qui affecte le gouvernement). Mais comme le greffon
Thunderbird est livré avec son source Javascript, on peut l'étudier et découvrir
qu'il existe une API REST en https://www.signal-spam.fr/api/signaler
. Celle-ci est
appelable avec le programme curl dont on ne
dira jamais assez à quel point il permet de faire facilement des
clients REST (cf. programmation-rest.html
). Merci beaucoup
à Pierre Beyssac (auteur d'un programme équivalent en Python) pour son aide au débogage et à Vincent Lefèvre et Jean-Paul Béconne pour des remarques ultérieures.
Voici donc le programme shell. On utilise
OpenSSL pour encoder en
Base64 car Signal Spam ne se
contente pas de l'encodage « pour cent » des
URL (la documentation de l'API explique pourquoi). Le mot de passe figure dans le programme
mais curl permet aussi de le mettre dans le fichier
~/.netrc
. Utilisez ce script à votre guise, sous la licence que vous voulez.
#!/bin/sh # Username & password auth_info=moi:monmotdepasse # Do not change anything below # Be careful if you change the curl options. For instance, '--proxy ""' # is to force a direct access, without going through the proxy (the # actual value will depend on the rules of your network, ask the # system administrator) if ! which openssl > /dev/null 2>&1; then echo "Missing openssl program" >&2 exit 1 fi if ! which curl > /dev/null 2>&1; then echo "Missing curl program" >&2 exit 1 fi curl_version=`curl -V | head -1 | cut -d' ' -f2- ` result=`openssl enc -base64 | curl --silent --proxy "" --request POST \ --user-agent "signalspam.sh (http://www.bortzmeyer.org/signaler-a-signal-spam.html) curl/$curl_version" \ --user $auth_info \ --write-out "%{http_code}" --form message='<-' \ https://www.signal-spam.fr/api/signaler` if [ $result != "202" ]; then echo "Error $result while reporting the spam" exit 1 fi exit 0
Ensuite, je configure mutt pour lancer ce programme lorsque je tape Esc-Z :
macro index,pager \ez "<enter-command>set pipe_decode=no\n<pipe-entry>signalspam.sh\n<enter-command>set pipe_decode=yes\n" "Report a spam to SignalSpam"
(Cette syntaxe nécessite mutt >= 1.5. Avec une version plus ancienne, mettez la macro "index" et la macro "pager" sur deux lignes séparées.)
Vincent Lefèvre me fait remarquer qu'il faudrait mieux sauvegarder
l'ancienne valeur de pipe_decode
, puis la
restaurer à la fin comme expliqué
dans la documentation de mutt. Mais cela semble nécessiter une
version très récente de mutt et je ne l'ai pas encore fait
fonctionner.
Vérifiant sur mon espace membre Signal Spam, je peux voir que les spams sont bien enregistrés. Il reste à espérer que cela servira à quelque chose. Pour l'instant, je suis très pessimiste. Depuis trois ans que le service est ouvert, les « signaleurs » n'ont eu droit à aucune information, ni statistiques (à part que « Depuis l'inauguration de ce service, près de 30 000 internautes se sont inscrits et plus de 4 millions de messages indésirables ont été ainsi transmis à Signal spam. »), ni information individualisée sur les signalements faits et leurs conséquences. Le 20 septembre 2010, le gouvernement a annoncé une nouvelle version de Signal Spam, sans qu'aucune leçon n'ait été tirée de l'échec de la précédente, et notamment sans remise en cause de cette politique de non-communication. Pour l'instant, l'outil présenté ici semble encore marcher avec le nouveau système.
Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)
Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)