Posts tagged with programmation

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);   … } ~~~~