<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" href="/stylesheets/rss.css"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
  <channel>
    <title>The BFC Computing Weblog: Tag ruby</title>
    <link>http://blog.bfccomputing.com/articles/tag/ruby</link>
    <language>en-us</language>
    <ttl>40</ttl>
    <description>My God, It's Full of Source!</description>
    <item>
      <title>Battling Trackback Spam at the Typo Console</title>
      <description>&lt;p&gt;So I looked at my blog today and found 800+ trackback spams that Akismet had missed (typo bug?) and started to delete them manually.&lt;/p&gt;

&lt;p&gt;Then I remembered the Typo console.  A few Google searches later for the basic idea, and not being afraid to experiment with Ruby (my, it&amp;#8217;s a logical language), I came up with a way to delete trackback spams based on Ruby expressions.&lt;/p&gt;

&lt;p&gt;I&amp;#8217;m including a list of commands I issued to eliminate 90% of the problem articles at the end of this article for others who might have the same problem.  If you don&amp;#8217;t like dirty words, skip it.  Review the rules before you run them as it deletes data.&lt;/p&gt;

&lt;p&gt;Next up - generating IPTables ban logs directly with similar queries.&lt;/p&gt;

&lt;p&gt;And now, without further ado:&lt;/p&gt;

&lt;pre&gt;
Trackback.find(:all, :conditions =&gt;"blog_name='nice article'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%Amateur%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%ambien%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%Amoxicillin%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%anal %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%asshole%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%babes %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%blowjob%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%boobs%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%breast %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%breasts %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%buttplug %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%centerfold %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%cialis%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%clitoris%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%codeine%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%credit %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%cum %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%Ephedrine%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%erectile%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%escort %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%fetish %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%fisted %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%flashing %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%fuck %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%galoponir%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%gay %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%hardcore %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%hentai%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%incest %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%Lexapro%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%loans %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%meridia %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%mortgage%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%naked%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%naughty %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%nigger %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%niggers %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%nude %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%nudes %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%panties %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%paxil%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%penis%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%penthouse%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%pharmacy%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%Phentermine%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%pics %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%polomurinureon%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%porn %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%propecia%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%propeciax%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%prozac%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%pussy%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%refinance %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%sex %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%sluts %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%soma %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%spanking%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%Sucked %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%Tamadol%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%tits %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%topless %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%Tramadol%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%Tramdol%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%ultram%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%vagina%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%valium%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%viagra%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%xanax%'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt ILIKE '%xxx %'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"excerpt='nice article'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"ip='64.27.21.46'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"ip='82.166.248.8'").map{|t| t.destroy}
Trackback.find(:all, :conditions =&gt;"ip LIKE '62.213%'").map{|t| t.destroy}
&lt;/pre&gt;</description>
      <pubDate>Tue, 11 Dec 2007 02:24:00 -0500</pubDate>
      <guid isPermaLink="false">urn:uuid:61a9de0f-f5c9-4c19-bcfe-9476bc2a06c6</guid>
      <author>Bill McGonigle</author>
      <link>http://blog.bfccomputing.com/articles/2007/12/11/battling-trackback-spam-at-the-typo-console</link>
      <category>BFC Computing</category>
      <category>Web</category>
      <category>Development</category>
      <category>Internet</category>
      <category>Open Source</category>
      <category>ruby</category>
      <trackback:ping>http://blog.bfccomputing.com/articles/trackback/4713</trackback:ping>
    </item>
  </channel>
</rss>
