Automatically cleaning up SPAM Wordpress comments

September 6th, 2009 ntavares Posted in dri, en_US, mysql 2 Comments »

Doing the maintenance of our blogs (Wordpress), I bumped over one that had fallen on an active botnet. It was receiving like 5 or 6 spam comments per minute. It was nearly the only one in such an harassment, so I suspect the botnet loved it for being open on commenting.

Since I've activated reCaptcha I've been monitoring my "spam folder" and I'm really confident on his guesses, so I just wrote a STORED PROCEDURE to clean up these spam comments on a periodic basis, so I can do a sitewide cleanup:

MySQL:
  1. DELIMITER $$
  2.  
  3. DROP PROCEDURE IF EXISTS `our_blog_db`.`REMOVE_OLD_SPAM`$$
  4. CREATE PROCEDURE `our_blog_db`.`REMOVE_OLD_SPAM` ()
  5.     MODIFIES SQL DATA
  6.     COMMENT 'remove comentarios marcados como SPAM'
  7. BEGIN
  8.  
  9. DECLARE done BIT(1) DEFAULT FALSE;
  10. DECLARE commtbl VARCHAR(50);
  11. DECLARE comments_tbls CURSOR FOR SELECT TABLE_NAME
  12.     FROM information_schema.TABLES  
  13.     WHERE TABLE_SCHEMA = 'our_blog_db' AND TABLE_NAME LIKE '%comments';
  14. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
  15.  
  16.  
  17. OPEN comments_tbls;
  18.  
  19. REPEAT
  20.     FETCH comments_tbls INTO commtbl;
  21.     SET @next_tbl = CONCAT('DELETE FROM our_blog_db.',commtbl,'
  22.         WHERE comment_approved = "spam"
  23.         AND comment_date_gmt < DATE_SUB(UTC_TIMESTAMP(), INTERVAL 15 DAYS)');
  24.     PREPARE get_next_tbl FROM @next_tbl;
  25.     EXECUTE get_next_tbl;
  26.  
  27. UNTIL done END REPEAT;
  28.  
  29. CLOSE comments_tbls;
  30.  
  31.  
  32. END$$
  33.  
  34. DELIMITER ;

It's very easy to stick it into an EVENT, if you have MySQL 5.1 or bigger, and which to do a daily clean up automatically:

MySQL:
  1. CREATE EVENT `EV_REMOVE_OLD_SPAM` ON SCHEDULE EVERY 1 DAY STARTS '2009-08-01 21:00:00' ON COMPLETION NOT PRESERVE ENABLE
  2. COMMENT 'remove comentarios marcados como SPAM' DO
  3. BEGIN
  4.  
  5. SELECT GET_LOCK('remove_spam',5) INTO @remove_spam_lock;
  6.  
  7. IF @remove_spam_lock THEN
  8.     CALL REMOVE_OLD_SPAM();
  9.  
  10. END IF;
  11.  
  12. END

Enjoy!

AddThis Social Bookmark Button

Syntax Highlighting nos blogs da DRI

July 9th, 2009 ntavares Posted in dri, pt_PT No Comments »

Não é à toa que toda a gente gosta do arco-íris - se uma imagem vale mil palavras, ler código a cores deve valer umas boas 900. Depois de montar as minhas primeiras demonstrações em MySQL, resolvi experimentar um plugin de Syntax Highlighting (sempre tive pavor a qualquer potencial tradução desta expressão).

O plugin escolhido [algures entre o acaso e o ranking do Google] foi o iG:Syntax Hiliter Plugin e, para já, de 0-100, dou-lhe um 70... é muito fácil de instalar, mas em termos de potencial parece-me inferior ao que faz, por exemplo, o SyntaxHighlight GeSHi no MediaWiki.

Não obstante, mesmo assim, teve que levar uma martelada para não deturpar caracteres mais conflituosos com HTML, que insistiam em transformar-se estupidagicamente em HTML entities (desde quando é que algo dentro de |code| deve ser transformado??). Mas bem, vamos ver como corre, e se não levo na cabeça do pessoal de infrastruturas...

Para já, a cobaia foi o último post: MySQL DATETIME vs TIMESTAMP vs INT performance and benchmarking with InnoDB. Claro está, já se avizinha uma martelada no tema... alguém conhece um com distribuição horizontal melhorzinha?

AddThis Social Bookmark Button

De repente…

May 2nd, 2008 ntavares Posted in dri, en_US No Comments »

...olhei para o lado, e era o único que não tinha blog... então cá vai disto.

O título é uma paródia a uma paródia que resultou da paródia que é o Natal, quando a malta se junta [para a paródia]. Ainda assim, deixo em aberto a possibilidade de fazer consultoria [remunerada] sobre qualquer localização de Portugal. Sim, porque conforme se tem visto nas últimas discussões na DRI sobre geografia de Lisboa, eu [já] tenho sempre razão, o pessoal já discute é por vício... :P

AddThis Social Bookmark Button