• Skip to main content
  • Skip to primary sidebar
  • Home
  • Professional Blog
  • Contact Me

Jesse Smith, MBA

Web developer & business consultant

You are here: Home / Reviews / BulletProof Security: WordPress plugin review

December 7, 2013 by Jesse Smith, MBA

BulletProof Security: WordPress plugin review

BulletProof Security is a security plugin for WordPress.  You can download it for free from the WordPress repository; or install it from the plugin installation tab within your website’s wp-admin.

For this review I tested BulletProof Security version 0.49.7 on WordPress version 3.7.1 in debug mode, with PHP display_errors on.  The .zip file for version 0.49.7 is 574kb, and the plugin takes up 2.23MB of disk space when installed in my test environment.

Installing BulletProof Security

Unlike many other WordPress security plugins, BulletProof Security acts primarily as a rule-based firewall for your system.  Due to the futility of blocking by IP address in the era of the distributed botnet, a rule-based firewall is increasingly becoming the standard “best practice” for securing your WordPress installation.

Plugin reputation

BulletProof Security comes highly recommended by the WordPress community.  The plugin has been downloaded 943,565 times (rapidly approaching a million) and enjoys a 4.8 out of 5 star ranking.

I always check the 1 star reviews, to look for potential known bugs.  In this case, they’re not very helpful.  One commenter stated briefly, “Website stopped working” but did not explain what type of crash was suffered.  With nearly a million downloads and only one comment along these lines, I’d say this result is not typical.  The only other one-star comment is a year old, and pertains to an issue that was fixed the same day.  In the thread started by that particular comment, one user recommended using BulletProof Security in conjunction with Wordfence.  That may be great advice, but this review is only meant to discuss one plugin at a time.  So let’s go!

First Impressions

I activate the BulletProof Security plugin, and here’s what happens.

What you will see

message screenshot

Upon activation, BulletProof Security tests for the presence of certain .htaccess files or rules within existing .htaccess files; and if those files or rules are not present, it presents a “nag” alert at the top of every screen within the wp-admin.  The nag has a quick link to get your new installation configured properly.  BulletProof Security does require your permission to make certain system changes, because some of the things that it does could potentially have unintended consequences for your system.

What I saw on my local test environment

screenshot of PHP error

Oh, bad news.  The first thing I see when installing the plugin is a Notice-level PHP error.  Looking at the call stack in the error message, this error is caused by the function bpsGetDomainRoot() within the plugin’s functions.php file.  Visiting another page within my wp-admin does not make the error go away.  Deactivating my cache plugin does not make the error go away.

Looking at the source code, this error is caused by the fact that I’m running the plugin in a development environment.  The relevant function is meant to remove the “www” from the SERVER_NAME constant.  It works fine with either ‘www.example.com’ or simply ‘example.com’ (without the w’s) but it throws a wobbly when the server’s name is “localhost” because “localhost” does not have a top level domain (such as .com, .net, .org, .me, etc).

Well, you won’t be running this plugin on your local testing server, you’ll be running it on a real website; so this error will not affect you.  Moving right along!

Configuring BulletProof Security

BulletProof Security must be configured before it begins to protect your website from attacks.  These steps cannot be automated, because they have the potential to overwrite some existing data, if you have a lot of rules in your .htaccess files already.

So first I click the link within the “nag” at the top of the page within my wp-admin.  This link takes me to the Security Status page.

screenshot of error message

I’m getting more errors here.  PHP is complaining about an undefined constant named UPLOADBLOGSDIR.  This error does not appear to be related to my local testing environment.  In fact, looking at the source code I see that the use of this constant is intended to provide WordPress MultiSite compatibility for the plugin.  However, I’m not running a MultiSite installation, so the use of the constant throws a Notice-level PHP error.  I’d recommend that the plugin developer should add an additional check to prevent the recurrence of this error.

Again, I’m running in debug mode with display_errors turned on.  Most users should not see this error unless they take the time to examine their server’s error logs.  Instead, most users will see something like this:

security status screen

Indicating that BulletProof Security is installed, but not yet configured.

I have added a few 301 Redirects to my .htaccess file just to confirm that they are deleted when I activate the options within BulletProof Security.

image of code

Now for the test.

Configuration Steps

There is no one-click installer for BulletProof Security.

From the “security status” tab I click over to the “Security Modes” tab.  From there I click the button labeled “Create secure.htaccess File.”  An alert reminds me that creating the file is not the same as enabling it.  I click OK.  I get a Success message.

activation message

Next I select the radio input named “BulletProof Mode” and click “Activate.”

screenshot of another alert message

Another alert asks me if I have backed up the data in my existing .htaccess file, and whether I created secure.htaccess in the previous step.  I click OK again.

I get an almost-success message with a red “important” reminder that I should also enable an .htaccess file for my wp-admin folder.  So I scroll down and click the “BulletProof Mode” radio button for the wp-admin folder, and again click Activate.  I get another success message.

Now I revisit the Security Status tab.

another screenshot of the security status

This time most of the status messages are green.  The notable exception is related to creating backups of my BulletProof Security .htaccess files.

That’s a low priority, so first let’s see what effects this plugin has had on the system so far.

screenshot of nag message

Well first I’d like to note, there’s still a nag message at the top of my screen.  It invites me to visit the plugin author’s website for “Bonus custom code: brute force login protection.”  This is an IP-based .htaccess snippet that, when properly configured, will ban any user other than the website owner from accessing the login page.  The code is hardly unique to this plugin, and as I’ve discussed elsewhere, it’s only useful if you have a small number of people who ever need to access the website’s admin area, and they only ever do so from the same location.  However, it is in fact one of the strongest (arguably “bulletproof”) methods of repelling brute force attacks without resorting to complex solutions like two-factor authentication (also known as cell-phone sign-in).  So I highly recommend implementing this code on most small business websites if possible.  For now, I’m going to dismiss the little nag message at the top of my screen.

another nag message

Oh you’re kidding me.  I dismiss the nag, and it shows me a different nag!  This one says, “Bonus custom code: Speed boost cache code.”  It’s got another link back to the plugin author’s website.  Look, I appreciate all the work the developer has gone into making this plugin excellent, but when I dismiss a nag, I want it gone, I don’t want it replaced with another nag.  Grumbling, I dismiss this one also.

yet another nag message

AND I GET A THIRD NAG!  This one says, “Bonus custom code: Author enumeration BOT probe code.”  With yet another link back to the developer’s website.  Come on, guy.  Too many nags.  I don’t care anymore.  Fortunately, when I dismiss this one, it actually goes away this time.

Behind the scenes

Let’s see what changes this plugin has made to the test environment.

File system changes

This plugin’s primary feature is related to the creation of .htaccess files.

As expected, activating the plugin’s “BulletProof Mode” overwrote my existing .htaccess file.  My HTTP status 301 Redirect directives were completely erased.  If I had not kept a backup, they’d have been gone completely.

screenshot of htaccess

But that’s ok, because I planned for this, and my existing file was just a placeholder anyway.

The rules put in place by BulletProof Security are excellent.  They include some of the best practices recommended by early versions of the HTML5 Boilerplate, and some of the rules included in Jeff Starr’s essential 5G Firewall, and mix them up with a number of additional rules to forbid directory traversal, SQL injection attacks, remote file inclusion, cross-site scripting, a lot of general snooping, and arbitrary code execution vulnerabilities.  (If you don’t know what any of that means, let’s just say briefly: they’re really nasty.  If you want more information about why people hack websites, you can start with this blog post.)

image of code

Interestingly, if you set up BulletProof Security on a new website before you set up your permalink settings, all the BulletProof .htaccess rules will be wiped by WordPress and replaced with the usual WordPress rewrite, when you set up permalinks.  So it’s important to remember to make any permalink changes before you install and configure the BPS plugin.

In addition to changing the root .htaccess file, the plugin also creates new .htaccess files within the /wp-admin/ folder, and within the plugin’s own folder.  Furthermore, the plugin creates a new folder for itself within /wp-content/, outside of the plugins folder, which is somewhat unusual behavior.  The new folder is named “bps-backup” and is presumably there so you can restore all the plugin data if the plugin itself is accidentally deleted from your system.

Database changes

The BulletProof Security plugin creates two new tables in the database.

screenshot of MySQL console

The table named “wp_bpspro_login_security” tracks failed login attempts.  This is for use with the Login Security feature.  I hadn’t got to that menu item yet, but it appears to be enabled by default.

The table named “wp_bpspro_seclog_ignore” saves the User-Agent string of bots whose activities you might not want to log, because they generate such an overwhelming number of error messages.

Surprisingly, BulletProof Security seems to store very little information in the “wp_options” table.  The only option I can find stored there is named “bulletproof_security_options_email.”  This single record does contain a rather long array of e-mail options.  It keeps track of the preferences from several of the menu options pages; including what level of security threat warrants an email notification; who those notifications should be sent to; whether the messages should be cc’ed to anyone (and so on); and the maximum size of the security log (which is stored separately as a text file).

The Result

So much for system changes.  Let’s examine the plugin’s more visible effects.

Public-facing code changes

BulletProof Security does not make obvious changes to the source code or output of your WordPress website’s pages.  Unless you are an attacker, you’re unlikely to be able to detect that a site is running the plugin.  And in my opinion, this is how all security plugins should be: invisible to legitimate users.

On the back end: menu items

So let’s look more closely at the plugin itself, within the wp-admin area.

.htaccess Core

This is where most of the plugin’s settings are found.  We went through most of this above, when we activated and configured the plugin.

screenshot of plugin dashboard

This screen also has a number of additional links. You can enable maintenance mode, access the FAQ or the forum on the plugin author’s website, and view the changelog.  The tab, “BPS Pro Features” tells you how the plugin is improved if you purchase the paid upgrade.  The “Website scanner” tab is a link to a third-party service, presumably paid.  The “Website SEO” tab is also a link to a third-party website, almost certainly a service that would cost money.

Login security

Login security is an essential component of any WordPress security plugin, because by default WordPress is just begging to be brute-forced.  The core system would allow the same attacker to attempt twenty thousand different passwords within two minutes if the server could respond that fast.  This is a vulnerability that I hope the WordPress core development team will rectify eventually.  However, as I keep saying, the era of the distributed botnet has rendered IP-based lockouts practically useless.  Still, there’s no reason we should make it easy for attackers, by allowing them to pound away from the same computer twenty thousand times.

login security

Unfortunately, the default setting for Error Messages is “Standard WP Login Errors,” which are overly verbose and can give an attacker information that they do not deserve, like whether or not they’re attempting to brute force an account that actually exists.  I’d be happier if the plugin’s default setting was to obfuscate login error messages.

Security log

This tab keeps track of bad bots whose attempts were denied by the plugin.  BulletProof Security serves its own custom files when a visitor encounters a 400 Bad Request, 403 Forbidden, or 404 Not Found error.  Those events are then logged in a plaintext file.  You can view the events from this screen.  If one particular bot generates lots and lots of error messages, you can choose to ignore it and not log the events (the bot will continue to be blocked).

image of error log interface

This screen also has the option to send email alerts when a user is locked out for too many login failures.

System info

This tab reveals information about your server.  I’m not going to post a screenshot…  Most of this is not something you can do anything about if you’re on shared hosting.  There are a few pieces of information that could help you to make your website security better.  For example, under “PHP Server /PHP.ini Info” BulletProof Security states whether or not your system allows such potential security vulnerabilities as “Allow URL fopen” and “Register Globals.”  If you find that those are turned on for your site, you should consider editing php.ini if you’re on a VPS, or else posting your own custom php.ini file within your web root directory.  So that’s the purpose of this screen: to reveal information about your system that could be useful to an attacker.  It also shows a lot of other system information.

Uninstalling

Upon deactivation, the plugin does not delete any information.

Upon plugin deletion, BulletProof Security does not remove the entries it had added to your .htaccess file.  So if you’re uninstalling the plugin because you want attackers to be able to do unsafe things to your website, you would have to delete the BulletProof rules from your .htaccess file by hand.

Upon plugin deletion, the “bps-backup” folder remains within the wp-content folder.  This does allow the plugin to be easily reinstalled; but it does sort of violate the whole concept of deleting and uninstalling a plugin.

Oh, it gets worse.  Upon plugin deletion, the BulletProof Security tables are NOT deleted from the database.  Tsk, tsk.  I feel that plugins should always clean up after themselves.  Unlike the last plugin I reviewed, I do not see even a deep-buried option that would allow me to tell the plugin to delete its data upon deactivation.

Assessment

I like BulletProof Security, I really do.  I think this type of rule-based firewall is essential for WordPress security.  As you can see from this review, I do have a number of gripes about this plugin.

  • Setup requires too many steps.  This is not user-friendly.
  • The plugin fails to clean up after itself by deleting its database tables and backup folder from the system when it is uninstalled by the user.
  • There are way too many nags.
  • Also there are several coding errors that show up on my system.  One of those coding errors is specific to an installation running as localhost; the others probably only show up in debug mode.  Even so, I’d recommend to the developer that they might be worthy of a fix when he has time.
  • And finally, I personally think a more restrictive login error message setting should be enabled by default.

Other than that, though, BulletProof Security provides essential back-end security to your WordPress website.  If you’re not big on editing your .htaccess files by hand, then you should probably install this plugin or one like it.  Alternatively if you’re a professional web designer, and you frequently set up lots of WordPress websites, and you want to be able to get them set up quickly with restrictive .htaccess settings and minimal fuss, then this plugin may be the one (or one of the ones) for you.

How does BulletProof Security compare to other security plugins?  I can’t wait to find out.  I’ve got to review a couple others first, and then in the end I’ll see how they all stack up.  Wait and see!

Filed Under: Reviews Tagged With: WordPress

Primary Sidebar

Categories

  • Announcements (3)
  • Events (8)
  • Reviews (8)
  • Sales and Marketing (2)
  • Security (4)
  • Thoughts (13)
  • Tips (24)
  • Unimportant (6)
  • Web Design (19)
  • Web server administration (5)

Archives

  • October 2017
  • September 2017
  • August 2017
  • November 2016
  • August 2016
  • January 2016
  • December 2015
  • November 2015
  • October 2015
  • September 2015
  • August 2015
  • May 2015
  • April 2015
  • March 2015
  • February 2015
  • November 2014
  • October 2014
  • September 2014
  • August 2014
  • May 2014
  • April 2014
  • March 2014
  • February 2014
  • January 2014
  • December 2013
  • November 2013
  • October 2013
  • September 2013
  • August 2013
  • June 2013
  • May 2013
  • March 2013
  • February 2013
  • December 2012
  • October 2012
  • September 2012
  • August 2012
  • May 2012
  • April 2012
  • March 2012
  • January 2012
  • November 2011
  • October 2010
  • August 2010
  • June 2010
  • April 2010

Recent Posts

  • Direct Mail Campaign Components
  • Introduction to Multi Networks for WordPress Multisite
  • How to Modify a WordPress Plugin
  • Always Changing
  • Putting the Plan in Action!

Copyright © 2026 · Workstation Pro on Genesis Framework · WordPress · Log in