Imágenes recientes |
Haciendo experimentos para combatir el spam en el ChatboxComo siempre comento no se programar pero me gusta hacerle al cuento.
Desde mi punto de vista el problema es que el filtro Bayes no hace del todo bien su función previo a guardar una entrada en el Chatbox, es decir una entrada que el Bayes va a guardar como spam de todos modos deja que se guarde en el Chatbox a menos que esta este repetida, en tal caso no la admite. Como primera barrera e intento arcaico intenté esto en ChatboxModel.php función NewEntry, para que los mensajes con nombres y ip's conocidas como spam no les permitiera guardar la entrada (línea 278 apróx): [code='PHP'] $params['ip'] = $ip; $params['now'] = MDB2_Date::mdbNow(); $params['message_key'] = $message_key; //Intento por filtrar el spam www.cuauhtemoc.org.mx. En algunas variables que van entre corchetes como "name" se confunde con el "name" del autor del post, por eso le puse "mas corchete", eso hay que quitarselo. $sql_spam = " SELECT MAX(is_spam) FROM [[bayes_source_references]] WHERE [[bayes_source_references]].author = {name mas corchete} OR [[bayes_source_references]].ip ={ip}"; $es_spam = $GLOBALS['db']->queryOne($sql_spam, $params); if($es_spam < 1) { $sql = " INSERT INTO [[chatbox]] (id, name, email, url, message, message_key, ip, updatetime, createtime) VALUES ({id mas corchete}, {name mas corchete}, correo@cuauhtemoc.org.mx, {url}, {message}, {message_key}, {ip}, {now}, {now})"; $result = $GLOBALS['db']->query($sql, $params); if (JawsError::IsError($result)) { return new JawsError(_t('CHATBOX_ERROR_COULD_NOT_ADD_ENTRY'), _t('CHATBOX_NAME')); } $id = $this->LastInsertedComment($params['now'], $params['message_key']); if ($id) { if ($GLOBALS['app']->Registry->Get('/gadgets/Chatbox/use_antispam') == 'true') { require_once JAWS_PATH.'include/Apis/JawsBayesSpamApi.php'; $bayes =& new JawsBayesSpamApi(); $bayes->Add($params['message'], 'Chatbox', $id, $params['name'], $params['ip']); } } return true; } $id = $this->LastInsertedComment($params['now'], $params['message_key']); if ($id) { if ($GLOBALS['app']->Registry->Get('/gadgets/Chatbox/use_antispam') == 'true') { require_once JAWS_PATH.'include/Apis/JawsBayesSpamApi.php'; $bayes =& new JawsBayesSpamApi(); $bayes->Add($params['message'], 'Chatbox', $id, $params['name'], $params['ip']); } } return true; } //aquí termina la función NewEntry . Creo que hice un despapaye pero aún funciona [/code] Lo que pasó fue que me comenzaron a poner diferentes nombre e ip´s muy variadas, antes en realidad se repetían mucho. Revisando la tabla de bayes_source_references` y `bayes_references` noté que la mayoría los sigue marcando como spam automáticamente, aclaro que me he dado a la tarea de actualzar directa y constantemente en la base de datos que mensajes son spam y cuales no, en las tablas mencionadas cuando el filtro no lo hace, por eso se me ocurrio que talvez sería conveniente filtrar los mensajes que se muestran en eñ Chatbox aunque ya estén guardados, es decir, si está guardado en Chatbox pero está marcado como spam pues que no lo ponga; para esto la función que modifiqué en ChatboxModel fue GetClassifiedEntries haciendo que la consulta de los mensajes en ChatBox no regrese los marcados como spam, quedó así (línea 139 apróx): [code='PHP'] function GetClassifiedEntries() { $limit = $GLOBALS['app']->Registry->Get('/gadgets/Chatbox/limit'); if (JawsError::IsError($limit) || is_null($limit)) { $limit = 10; } $result = $GLOBALS['db']->setLimit($limit); if (JawsError::IsError($result)) { return new JawsError(_t('GLOBAL_ERROR_QUERY_FAILED', 'GetEntries'), _t('CHATBOX_NAME')); } //consulta que filtra los mensajes www.cuauhtemoc.org.mx $sql = " SELECT chatbox.id as id, name, email, chatbox.ip as ip, url, message, updatetime FROM chatbox INNER JOIN bayes_source_references ON bayes_source_references.sourceref_id = chatbox.id INNER JOIN bayes_references ON bayes_references.id = bayes_source_references.bayesref_id WHERE bayes_source_references.is_spam = '0' AND bayes_references.category_id = 'nospam' ORDER BY id DESC"; $result = $GLOBALS['db']->queryAll($sql); [/code] Lo acabo de hacer y aún estoy esperando que llegue un mensaje (uno real, por que ya probé marcando unos manualmente) que el filtro marque automaticamente como spam para que ya no aparezca Espero que esta vez funcione mejor el experimento y que además les pueda servir a los demás Jawseros, si funciona quizá se pueda hacer algo parecido los comentarios en general mas adelante. ![]()
Trackback URI: http://cuauhtemoc.org.mx/index.php?trackback/175
#1 Re:Haciendo experimentos para combatir el spam en el Chatbox
ugg boots / 19 Enero, 5:46pm
ugg classic cardy fig, ugg classic cardy fig [ Responder (0) ]
Dejar un comentario
Fuentes XML de comentario: RSS | Atom
|
Foto del mesBúsquedaConversación |
Comentarios Recientes