While there are many strategies for blocking, filtering, and reducing blog spam, many of them don't due much to reduce the CPU load incurred to handle all that spam. Even if you have strong MT spam filters, or close comments on your entries, spam may continue to cause increased CPU load, even if the spam is rejected or filtered.

As far as spammers are concerned, the automated ones don't care much (or even realize) that comments are closed on your entries. And they don't take the time to see if their attempts were junked or pubished. They will continue to submit comment spam and trackback spam. MT will refuse them, of course, but the entire MT application loads on every attempt -- the MT cgi scripts still incur load in process these, but likely not as much as a junked or successful comment submission. The main benefit to closing comments and using MT junk filters is to reduce / remove the clean-up effort, and to keep spam from be published on your blog. You end up with less published spam, but I am not sure how much CPU load is saved in these cases.

To address the CPU load of spam, you need to prevent/reduce spam hitting the MT cgi scripts. A temporary solution is to rename your comments and trackback scripts. Spammers will still try to hit the old URLs, but they will get 404 "not found" errors. This still incurs some load, but not as much as if MT had to handle those requests to reject or filter them. This solution is temporary because spammers will soon learn the new names of your scripts, and spam and load will increase thereafter.

A longer term solution is to attempt to block spam *before* it hits the MT scripts. mod_security is one way to do this. It is an Apache module that uses rule-based filters to block requests at an early stage. You still need a good ruleset, of course. In many, case you will need a dedicated server to use this, but some shared hosting providers support mod_sec to varying degrees. In recent days, spam attempt have increased on my server. Yesterday, mod_security blocked almost 4,000 spam attempts. Without mod_security, that would have been a lot for MT and my dedicated server to handle. My server would likely have crashed several times. But my blocking the spam before it gets to my MT scripts, I was able to weather the attack without a huge spike in CPU load.

For a complete list of the new features in v0.6, click here.

MTTrackbackEntry is a Movable Type plugin and hack that enables you to create new entries from the Trackbacks that you receive. In other words, it enables other people to post new entries in your blog, simply by pinging an entry or category on your blog. The title of this plugin/hack could just as easily be called TrackbackCrosspost, since it can act as a trackback-based cross-posting tool.

Currently, entries are created AND pings are received and recorded by default. In v0.6, actual ping entries can be optionally turned off. So if you turn off pings, TrackbackEntry will only record a new entry. Personally, I can't think of many practical cases for record the ping as well - it just clutters up your database.

TrackbackEntry is especially useful when used to ping Categories rather than entries. When a category is pinged, the new entry is added to that category. This provides more control over the display of Trackback-Entries (display in sidebar, sub-page, etc.)

New: Category Creation

In v0.6, you can enable a new category creation feature. This powerful feature enables people to create entries in categories that don't yet exist on your blog. For example, ping the following:

...mt-tbentry.cgi/books

would create a new category in your blog called "books" and add the entry to that category. If your blog already has a category called "books", the entry is simply added to that category. One of the benefits of this approach is that people don't need to remember the trackback id of the category.

MT-Blacklist Support

Version 0.6 includes optional support for MT-Blacklist. I have only tested this with v 1.63rc2 with MT 2.661. When this option is turned on, incoming pings are scanned against your blacklist just like a real trackback. This option is off by default.

Template Tags

There are only two new tags provided (because most of functionality lies in the scripts, not in the plugin itself). The following tags enable you to output the TrackbackEntry URLs for entries and categories:

<MTEntryTrackbackEntryLink> - Similar to <MTEntryTrackbackLink>, this tag will display the TrackbackEntry URL for a particular entry. Others can use this URL to to send a TrackbackEntry ping, which will create a Trackback record for the entry and create a new entry in the blog.

<MTCategoryTrackbackEntryLink> - Similar to <MTCategoryTrackbackLink>, this tag will display the TrackbackEntry URL for a particular category. Others can use this URL to to send a TrackbackEntry ping, which will create a Trackback record for the category and create a new entry in the category.

Requirements

Net::Blogger - Sorry, I neglected to mention this is the first release.

Installation

1. Download Now:

MTTrackbackEntry.zip and extract the files.

Membership required, please sign-in or register:

2. Place "mt-tbentry.cgi" in your MT directory (same directory as mt.cgi). Then CHMOD to 755.

3. Place "TrackbackEntry.pl" in your "plugins" directory within your MT directory.

4. Create a new user to be be used for Trackback-Entries. Make note of the username and password. Give the user permisions to post and rebuild files on each of the blogs that you want to enable TrackbackEntry.

5. Open "TrackbackEntry.pm" and find the line that reads:

my $mt_username = 'tbentriesusername';

Replace 'tbentriesusername' with the user name chosen in Step 4 (the username should be enclosed in single quotes). (remember that MT usernames are case-sensitive)

6. Just below this line, you should find the following line:

my $mt_password = 'tbentriespassword';

Replace 'tbentriespassword' with the password chosen in Step 4 (the password should be enclosed in single quotes).

7. Search for "OPTIONS" and choose the options that you want by setting them to 1 or 0. Options include: create new category, default blog, default category, use MT-Blacklist, and create trackback.

8. Save the file and upload to '/lib/MT/App/' within your MT directory (same directory as "Trackback.pm")

9. Begin using the tags described above to inform your visitors of the TrackbackEntry URLs for your entries and categories.

10. Test it out be asking someone to send you a TrackbackEntry ping. (If you want me to send you a test ping, let me know)

Displaying TrackbackEntries

For displaying TrackbackEntries, it is important to understand what data gets stored in which entry fields:

-the Ping Excerpt gets stored in the Entry Body field.
-the Ping Blog Name gets stored in the Extended Entry field.
-the Ping Source URL gets stored in the Excerpt field.
-the Ping Remote IP gets stored in the Keyworda field.

As such you can use the associated MT template tags to display the entries. If you want to display a list of entries that are mixed between your own entries and TrackbackEntries, you may want to make use of the Compare plugin like this:

<MTIfNotEqual a="[MTEntryAuthor]" b="tbentriesusername">
<a href="<$MTEntryAuthorURL$>"><$MTEntryAuthor$></a>
</MTIfNotEqual>
<MTIfEqual a="[MTEntryAuthor]" b="tbentriesusername">
<MTIfEqual a="[MTEntryExcerpt no_generate='1']" b="">
<$MTEntryMore convert_breaks="0"$>
</MTIfEqual>
<MTIfNotEqual a="[MTEntryExcerpt no_generate='1']" b="">
<a href="<$MTEntryExcerpt no_generate="1"$>"><$MTEntryMore convert_breaks="0"$></a>
</MTIfNotEqual>
</MTIfEqual>

The above template snippet displays a linked version of the author's. In the case of TrackbackEntries, the blog name is used as the author name and the source URL is used as the author URL.

Please let me know what you think.

Version History

0.5
-Initial release
0.6
-recording of trackback is now optional
-category creation
-MT-Blacklist support

MTTrackbackEntry is a Movable Type plugin and hack that enables you to create new entries from the Trackbacks that you receive. In other words, it enables other people to post new entries in your blog, simply by pinging an entry or category on your blog. The title of this plugin/hack could just as easily be called TrackbackCrosspost, since it can act as a trackback-based cross-posting tool.

Currently, entries are created AND pings are received and recorded. This means that TrackbackEntry will receive and record pings the same as usual, but it will also add a new entry. Perhaps a future version will only add new entries, or at least provide an option in this area.

TrackbackEntry is especially useful when used to ping Categories rather than entries. When a category is pinged, the new entry is added to that category. This provides more control over the display of Trackback-Entries (display in sidebar, sub-page, etc.)

Template Tags

There are only two new tags provided (because most of functionality lies in the scripts, not in the plugin itself). The following tags enable you to output the TrackbackEntry URLs for entries and categories:

<MTEntryTrackbackEntryLink> - Similar to <MTEntryTrackbackLink>, this tag will display the TrackbackEntry URL for a particular entry. Others can use this URL to to send a TrackbackEntry ping, which will create a Trackback record for the entry and create a new entry in the blog.

<MTCategoryTrackbackEntryLink> - Similar to <MTCategoryTrackbackLink>, this tag will display the TrackbackEntry URL for a particular category. Others can use this URL to to send a TrackbackEntry ping, which will create a Trackback record for the category and create a new entry in the category.

Installation

1. Download Now:

MTTrackbackEntry.zip and extract the files.

Membership required, please sign-in or register:

2. Place "mt-tbentry.cgi" in your MT directory (same directory as mt.cgi). Then CHMOD to 755.

3. Place "TrackbackEntry.pl" in your "plugins" directory within your MT directory.

4. Create a new user to be be used for Trackback-Entries. Make note of the username and password. Give the user permisions to post and rebuild files on each of the blogs that you want to enable TrackbackEntry.

5. Open "TrackbackEntry.pm" and find the line that reads:

my $mt_username = 'tbentriesusername';

Replace 'tbentriesusername' with the user name chosen in Step 4 (the username should be enclosed in single quotes). (remember that MT usernames are case-sensitive)

6. Just below this line, you should find the following line:

my $mt_password = 'tbentriespassword';

Replace 'tbentriespassword' with the password chosen in Step 4 (the password should be enclosed in single quotes).

7. Save the file and upload to '/lib/MT/App/' within your MT directory (same directory as "Trackback.pm")

8. Begin using the tags described above to inform your visitors of the TrackbackEntry URLs for your entries and categories.

9. Test it out be asking someone to send you a TrackbackEntry ping. (If you want me to send you a test ping, let me know)

Displaying TrackbackEntries

For displaying TrackbackEntries, it is important to understand what data gets stored in which entry fields:

-the Ping Excerpt gets stored in the Entry Body field.
-the Ping Blog Name gets stored in the Extended Entry field.
-the Ping Source URL gets stored in the Excerpt field.
-the Ping Remote IP gets stored in the Keyworda field.

As such you can use the associated MT template tags to display the entries. If you want to display a list of entries that are mixed between your own entries and TrackbackEntries, you may want to make use of the Compare plugin like this:

<MTIfNotEqual a="[MTEntryAuthor]" b="tbentriesusername">
<a href="<$MTEntryAuthorURL$>"><$MTEntryAuthor$></a>
</MTIfNotEqual>
<MTIfEqual a="[MTEntryAuthor]" b="tbentriesusername">
<MTIfEqual a="[MTEntryExcerpt no_generate='1']" b="">
<$MTEntryMore convert_breaks="0"$>
</MTIfEqual>
<MTIfNotEqual a="[MTEntryExcerpt no_generate='1']" b="">
<a href="<$MTEntryExcerpt no_generate="1"$>"><$MTEntryMore convert_breaks="0"$></a>
</MTIfNotEqual>
</MTIfEqual>

The above template snippet displays a linked version of the author's. In the case of TrackbackEntries, the blog name is used as the author name and the source URL is used as the author URL.

Please let me know what you think.