Posts in Informatique

Anti-Spam PhpBB

Jan 16, 2007 in internet, programmation | Informatique

Le spam est partout, y compris sur les forums. Les différentes méthodes antispam se complexifient à mesure que les robots spammeurs arrivent à les surmonter!

Une solution simple et efficace, interdire les liens de type http:// ou https:// dans les messages, mais aussi dans le profil :)

Un grand merci à Haypo pour cette brillante idée !

Voici le patch correspondant pour phpBB : Premier fichier : posting.php. On interdit ici de poster un message dont le sujet ou le message en lui-même contient http:// ou https://. On interdit également de poster si l’un des champs de localisation, d’emploi, de loisirs, de signature et même de site web du profil de l’utilisateur contient http:// ou https://.

--- posting.php.old     2007-01-16 14:55:06.000000000 +0100
+++ posting.php 2007-01-16 16:38:19.000000000 +0100
@@ -555,8 +555,56 @@
                        $poll_length = ( isset($HTTP_POST_VARS['poll_length']) && $is_auth['auth_pollcreate'] ) ? $HTTP_POST_VARS['poll_length'] : '';
                        $bbcode_uid = '';

+                       // ANTI-SPAM LILOLIPO...
+                       // Pas de http dans le message...
+                       if (
+                           strstr($username, "http://") !== false
+                           || strstr($subject, "http://") !== false
+                           || strstr($message, "http://") !== false
+                           || strstr($username, "https://") !== false
+                           || strstr($subject, "https://") !== false
+                           || strstr($message, "https://") !== false
+                           )
+                         {
+                           $error_msg = 'Sujets ou messages contenant "http://" ou "https://" interdits. '.
+                             'Si vous n\\'etes pas un robot, supprimez simplement '.
+                             '"http://" et "https://" de vos liens ;-)';
+                           break;
+                         }

+                       // on verifie l'absence de http dans le site du profil de l'utilisateur
+                       if ($userdata['session_logged_in'])
+                         {
+                           $sql = "SELECT user_website, user_from, user_occ, user_interests, user_sig FROM " . USERS_TABLE . " WHERE user_id = ".$userdata['user_id'];
+
+                           if ( !($result = $db->sql_query($sql)) )
+                             {
+                               message_die(GENERAL_ERROR, 'Could not obtain user\\'s website information', '', __LINE__, __FILE__, $sql);
+                             }
+                           if ( $row = $db->sql_fetchrow($result) )
+                             {
+                               if (strstr($row['user_website'], "http://") !== false
+                                   || strstr($row['user_website'], "https://") !== false
+                                   || strstr($row['user_from'], "http://") !== false
+                                   || strstr($row['user_from'], "https://") !== false
+                                   || strstr($row['user_occ'], "http://") !== false
+                                   || strstr($row['user_occ'], "https://") !== false
+                                   || strstr($row['user_interests'], "http://") !== false
+                                   || strstr($row['user_interests'], "https://") !== false
+                                   || strstr($row['user_sig'], "http://") !== false
+                                   || strstr($row['user_sig'], "https://") !== false
+                                   )
+                                 {
+                                   $error_msg = 'Profils contenant "http://" ou "https://" interdits. '.
+                                                       'Si vous n\\'etes pas un robot, supprimez simplement '.
+                                                       '"http://" et "https://" de votre site web, localisation, signature, emploi, ... de votre profil ;-)';
+                                   break;
+                                 }
+                             }
+                         }

               prepare_post($mode, $post_data, $bbcode_on, $html_on, $smilies_on, $error_msg, $username, $bbcode_uid, $subject, $message, $poll_title, $poll_options, $poll_length);

                        if ( $error_msg == '' )
                        {
                                $topic_type = ( $topic_type != $post_data['topic_type'] && !$is_auth['auth_sticky'] && !$is_auth['auth_announce'] ) ? $post_data['topic_type'] : $topic_type;
@@ -1116,4 +1164,4 @@

 include($phpbb_root_path . 'includes/page_tail.'.$phpEx);

Deuxième fichier : includes/usercp_register.php. On interdit l’inscription d’utilisateur qui ont rempli le champ Site internet de leur profil.

--- includes/usercp_register.php.old    2007-01-16 16:40:04.000000000 +0100
+++ includes/usercp_register.php        2007-01-16 17:06:09.000000000 +0100
@@ -447,7 +447,9 @@

        if ( $website != '' )
        {
- rawurlencode($website);
+         $error = true;
+         $error_msg = "Pour lutter contre les robots spammeurs, il est interdit de remplir le champ " . $lang['Website'];
+         // rawurlencode($website);
        }

        $avatar_sql = '';

Howto génération de bugs - épisode 2

Jan 05, 2007 in bug, programmation | Informatique

Et voici le retour de l’opération génération de bug en C/C++.

Comme une bonne illustration veut mieux qu’un long discours :

~~~~ {.cpp} char* substring(const char * chaine, int debut, int longueur) { char buffer[512]; strncpy(buffer, chaine[debut], longueur); return buffer; } ~~~~

Howto génération de bugs - épisode 1

Dec 14, 2006 in bug, programmation | Informatique

Je démarre une série Howto génération de bugs. À chaque fois, je vais présenter un bout de code potentiellement générateur de bug, mais pourtant exploité en production ;) Je m’appuierai uniquement sur du vécu, c’est à dire du code que j’ai eu l’occasion de corriger/nettoyer dans le cadre de mon travail…

Épisode 1 :

~~~~ {.cpp} class A { private: char commentaire; … };     A::methode(char cm, …) { commentaire = “NO_COMMENT”;   if (cm != NULL) strcpy(commentaire, cm);   … } ~~~~

Encodage MP3 sous Gnome

Dec 05, 2006 in linux, mp3 | Informatique

Pour encoder un CD en MP3 sous Gnome, le logiciel conseillé est Sound Juicer. Comme tous les extracteurs de CD récents, il récupère la liste des titres par internet.

Son problème, il utilise gstreamer au lieu de passer directement par le programme d’encodage adequat (lame par exemple). Il faut installer les plugins gstreamer nécessaire puis ajouter les configuration gstreamer, et c’est là que ça se complique :(

Pour encoder en VBR par exemple, il faut créer un “profil” (menu Édition > Préférences > Éditer les profils) avec comme pipeline Gstreamer :

audio/x-raw-float,rate=44100,channels=2 ! lame name=enc preset=1006 ! id3v2mux

Évident, non ? malheusement non, puisque les options ne correspondent même pas à celle de la ligne de commande de “lame”

Dernier reproche, un bug connu de gstreamer fait que la durée enregistrée du fichier lorsque celui-ci est encodé à débit variable (VBR) ne correspond pas à la durée réelle de la chanson!