The easiest, most effective way to secure WordPress. Improve the security of any WordPress site in seconds.
|Author:||iThemes (profile at wordpress.org)|
|WordPress version required:||4.7|
|WordPress version tested:||4.9.4|
|Added to WordPress repository:||23-10-2010|
|Total downloads:||12 552 226|
|Active installs:||900 000+|
Click to start download
WordPress security settings are organized into an easy-to-use dashboard.
Settings can also be managed in a list view.
Settings are easily configured and explained with descriptions.
Advanced WordPress security settings let you make more complex modifications to your site.
Free malware scan powered by Sucuri SiteCheck.
NOTE: iThemes Security makes significant changers to your database and other site files which can be problematic, so a backup is strongly recommended before making any changes to your site with this plugin. While problems are rare, most support requests involve the failure to make a proper backup before installation.
- BEFORE YOU BEGIN: Back up your WordPress database, config file, and .htaccess file. We recommend using BackupBuddy, our WordPress backup plugin for a complete site backup.
- Upload the zip file to the
- Activate the plugin through the ‘Plugins’ menu in WordPress
- Visit the Security menu for checklist and options
DISCLAIMER: Under no circumstances do we release this plugin with any warranty, implied or otherwise. We cannot be held responsible for any damage that might arise from the use of this plugin.
Why does iThemes Security require the latest WordPress version? Can’t I use a slightly older version?
- One of the best security practices for a WordPress site owner is keeping software up to date. Because of this, we only test this plugin on the latest stable version of WordPress and will only guarantee it works in the latest version.
Will this plugin completely stop all attacks on my site?
- No. iThemes Security is designed to help improve the security of your WordPress installation from many common attack methods, but it cannot prevent every possible attack. Nothing replaces diligence and good practice. This plugin makes it a little easier for you to apply both.
Is this plugin only for new WordPress installs or can I use it on existing sites, too?
- Many of the changes made by this plugin are complex and can break existing sites. While iThemes Security can be installed on either a new or existing site, we strongly recommend making a complete backup of your existing site before applying any features included in this plugin.
Will this plugin work on all servers and hosts?
- iThemes Security requires Apache or LiteSpeed and mod_rewrite or NGINX to work.
- While this plugin should work on all hosts with Apache or LiteSpeed and mod_rewrite or NGINX, it has been known to experience problems in shared hosting environments where it runs out of resources such as available CPU or RAM. For this reason, it is extremely important that you make a backup of your site before installing on any existing site. If you run out of resources during an operation such as renaming your database table, you may need your backup to be able to restore access to your site.
- Finally, please make sure you have adequate RAM if you plan to use the file change detector or make large backups.
Does this work with network or multisite installations?
- Yes. We’re in the process of developing more documentation, so we’ll update this as soon as it’s ready.
Can I help?
- Of course! We are in constant need of testers. In addition, we can always use help with translations for internationalization. For more information on contributing to iThemes Security, visit this page.
What changes does this plugin make that can break my site?
- iThemes Security makes significant changes to your database and other site files which can be problematic for existing WordPress sites. Again, we strongly recommended making a complete backup of your site before using this plugin. While problems are rare, most support requests involve the failure to make a proper backup before installation. DISCLAIMER: Under no circumstances do we release this plugin with any warranty, implied or otherwise. We cannot be held responsible for any damage that might arise from the use of this plugin.
- Note that renaming the wp-content directory will not update the path in existing content. Use this feature only on new sites or in a situation where you can easily update all existing links.
- Fixing iThemes Security Lockouts
- What is Changed By iThemes Security
I’ve enabled the Enforce SSL option, and it broke my site. How do I get back in?
- Open your wp-config.php file in a text editor and remove the following 2 lines:
- define(‘FORCE_SSL_LOGIN’, true);
- define(‘FORCE_SSL_ADMIN’, true);
Where can I get help if something goes wrong?
- Official support for this plugin is available for iThemes Security Pro customers. Our team of experts is ready to help.
Free support may be available with the help of the community in the WordPress.org support forums (Note: this is community-provided support. iThemes does not monitor the WordPress.org support forums).
- Enhancement: Updated logging system to keep track of more information and have more options to filter and sort log entries.
- Enhancement: Improved efficiency of File Change Detection scanning.
- Bug Fix: Fixed issue that could register loading the logging page as a failed login attempt on some sites.
- Enhancement: Display user lockouts in Lockout Sidebar.
- Bug Fix: Load translations on the plugins_loaded hook.
- Bug Fix: Fixed method that could be used to discover hidden login slug on some sites.
- Bug Fix: Fixed issue that could prevent Sync from loading Malware Scan results if a scan previously failed.
- Bug Fix: Update to the REST API “Restricted Access” feature to protect against methods to work around the restricted access.
- Bug Fix: Prevent login page being hidden when following the “Confirm Email Address” notification URL.
- Bug Fix: Hide Backend notifications not being properly sent when first enabled.
- New Feature: Introduces a scheduling framework for handling events. Cron is now used by default, and will switch to using an alternate scheduling system if it detects an error. To disable this detection set ITSEC_DISABLE_CRON_TEST in your wp-config.php file.
- Important: The ITSEC_FILE_CHECK_CRON and ITSEC_BACKUP_CRON constants have been deprecated. Use ITSEC_USE_CRON instead.
- Enhancement: Preserve notification settings when the responsible module is deactivated.
- Bug Fix: Process 404 lockouts on the ‘wp’ hook to prevent a headers have already been sent warning message.
- Bug Fix: Ensure Hide Backend emails are properly sent when activating Hide Backend before saving the Notification Center for the first time.
- Bug Fix: Prevent warning from being issued on new installs by allowing previous settings to be preserved if they exist.
- Bug Fix: Better handle WP_Error objects in mail errors that occurred before updating to first patch release.
- Bug Fix: A non static method was being called statically.
- Bug Fix: Fix occasional duplicate backups and file scans.
- Bug Fix: Fixed issue where scheduled events could repeat on sites that do not properly support WordPress’s cron system.
- Bug Fix: Reactivating Away Mode now replaces the active file if you had previously removed it.
- Bug Fix: Ensure lockouts take effect immediately, even on systems where changes to server configuration files do not take effect immediately.
- New Feature: Introduces the Notification Center, a centralized place to manage and customize email notifications sent by iThemes Security.
- Enhancement: Updated queries and prepare statements to account for changes to the esc_sql() function in WordPress 4.8.3.
- Bug Fix: Fixed SQL query bug that resulted in the “Minutes to Remember Bad Login (check period)” setting being ignored.
- Bug Fix: Fixed bug that prevents wp-admin/install.php blocking from working properly on nginx servers.
- Bug Fix: Don’t attempt to do an SSL redirect when WP CLI is running.
- New Feature: Added a new setting in WordPress Tweaks: “Login with Email Address or Username”.
- Enhancement: Host email images from the plugin instead of relying on iThemes servers to help email clients marking messages as spam or blocking images.
- Bug Fix: Error when searching for modules preventing modules from appearing.
- Bug Fix: Use the wp_options table when acquiring locks in Multisite.
- Bug Fix: Prevent duplicate daily digest emails on sites with high load.
- Misc: Added Magic Links, a new Pro-only feature, to be activated by Security Check.
- Misc: Rearranged modules to be listed alphabetically.
- Bug Fix: Fixed logical error that prevented backups from executing.
- Bug Fix: Fixed issue that could cause database locks to flood the database.
- Enhancement: Simplified the SSL module to offer a simple Enable/Disable setting and simplified explanations. The legacy settings are available by selecting Advanced.
- Enhancement: Added the itsec-get-ip filter to allow code to supply the remote IP directly.
- Enhancement: Enabling SSL support will only log you out if you are not already on an https connection.
- Enhancement: Improve password requirements compatibility with plugins and systems that integrate with WordPress Users.
- Removed Old Feature: Removed the “Replace jQuery With a Safe Version” feature as its use (protecting against a specific jQuery bug: https://bugs.jquery.com/ticket/9521) is many years old and is no longer a concern.
- Bug Fix: Bumped version number of some scripts to ensure that they refresh properly.
- Bug Fix: Fixed way to work around Hide Backend on some hosts.
- Enhancement: Replaced file locking with database locking. This method of locking is compatible with all systems as it does not require the ability to write files. It also allows for locking to work on sites that have multiple front-end servers with a shared database. Since file locking is no longer used, the Global Settings > Disable File Locking setting was removed.
- Enhancement: Add “Copy to Clipboard” functionality for server and wp-config rules.
- Bug Fix: Prevent 404s when following links in email notifications on a site with Hide Backend enabled.
- Bug Fix: Ensure uninstall process is not run when another version of iThemes Security is still active.
- Bug Fix: Fixed method of working around Hide Backend.
- Bug Fix: Warnings are no longer generated when saving a user profile with a role of “No role for this site” selected.
- Important: The way that Hide Backend functions changes in this release. Previously, if your Hide Backend Login Slug was wplogin, going to example.com/wplogin would result in the URL remaining example.com/wplogin. The new implementation of this feature results in a redirect to a URL that looks as follows: example.com/wp-login.php?itsec-hb-token=wplogin. While this may not be desireable for some users, this change was necessary to fix longstanding compatibility issues with other plugins. Once you access the login page using the Login Slug page, a cookie is set with an expiration time of one hour. As long as the cookie remains, you can access example.com/wp-login.php without having to access the Hide Backend Login Slug first. If you wish to confirm that Hide Backend is working properly on your site, opening up a private browsing window is a quick way to test without having to log out and clear cookies.
- New Feature: Added support for iThemes Sync to run the Security Check feature from inside the Sync service.
- New Feature: Added support for the ITSEC_DISABLE_MODULES define.
- Bug Fix: Removed warning: “Non-static method ITSEC_Setup::uninstall() should not be called statically”.
- Bug Fix: Fixed the ability to manually enter a page number to navigate to on the Security > Logs page.
- Bug Fix: Fixed source of warning that could appear when creating a backup while running a PHP version less than 5.4.
- Bug Fix: Fixed source of notice that could appear when reseting a user’s password when the Strong Passwords Enforcement feature is enabled.
- Bug Fix: Fixed bugs that prevented reporting of specific error messages related to updating the wp-config.php file.
- Bug Fix: Fixed an infinite loop that could occur when expiring a cookie and Hide Backend is enabled.
- Bug Fix: Fixed compatibility issue with the Jetpack plugin when Hide Backend is enabled which could prevent Jetpack from redirecting users to the wordpress.com login page.
- Bug Fix: Fixed issue where access to wp-admin/admin-post.php when Hide Backend is enabled.
- Bug Fix: Fixed issue that could prevent “Register” and “Lost your password?” links from working properly on the login page when Hide Backend is enabled.
- Bug Fix: Fix fatal error when updating a profile.
- Bug Fix: Fix strong passwords not being recognized as strong on the profile page.
- Bug Fix: Fix fatal error when registering a new user without specifying a role ( iThemes Exchange ).
- Bug Fix: Compatability with JetPack SSO and Password Requirements.
- Bug Fix: Ensure viewport meta is defined when loading the password requirements update password form.
- Bug Fix: Hide Backend is now compatible with Jetpack Single Sign On.
- Bug Fix: Hide Backend now hides registration pages on multisite sites.
- Bug Fix: Fixed password-protected posts not properly handling the password when Hide Backend is enabled.
- Enhancement: Removed AhrefsBot from the HackRepair blacklist as they are legitimate bot.
- Enhancement: Improved efficiency of Hide Backend code, increasing site performance when the feature is enabled.
- Enhancement: Enforce strong passwords during log-in. Can be disabled via the ITSEC_DISABLE_PASSWORD_REQUIREMENTS constant.
- Enhancement: Use canonical roles library to determine if a new user or an updated role requires a strong password.
- Enhancement: Introduce password requirements module to centralize handling of password updates.
- Enhancement: The Hide Backend hidden login URL is no longer leaked by password-protected content.
- Enhancement: Allow for searching through modules and settings.
- Enhancement: Link to other module settings pages without forcing the page to refresh.
- Enhancement: Fire an action, “itsec_change_admin_user_id”, when the admin user id changes.
- Enhancement: Changed default Hide Backend Register Slug from wp-register.php to wp-signup.php since WordPress switched from using wp-register.php to wp-signup.php for registrations. This will not affect existing sites.
- Enhancement: Hide Backend functions purely in PHP code now rather than relying half on PHP code and half on .htaccess and nginx.conf modifications. This allows Hide Backend to function on web servers and server configurations that it was previously not compatible with.
- Misc: Updated or added phpDoc to many functions.
- Misc: Updated Disable File Locking description.
- Bug Fix: When a requesting IP address cannot be found, default to 127.0.0.1. This fixes issues with some alternate cron setups.
- Bug Fix: Having more than one iThemes Security modification in a .htaccess, nginx.conf, or wp-config.php file will no longer result in having all the file content between each section removed when updating the file.
- Bug Fix: Modifications to the wp-config.php file added by W3 Total Cache now have their Windows-style newlines preserved when iThemes Security updates the file.
- Enhancement: Improved plugin performance by reducing the number of queries made on each page.
- Enhancement: Reduced memory and CPU usage due to various code improvements.
- Bug Fix: A database backup will no longer be created when first activating the plugin.
- Bug Fix: Added compatibility for MySQL strict mode in database creation syntax.
- Bug Fix: Removed warning about a “non well formed numeric value encountered” in PHP 7.1.
- Bug Fix: Modifications to wp-config.php, .htaccess, and nginx.conf files are now properly re-added upon reactivation.
- Bug Fix: Fixed full settings for Hide Backend being displayed after disabling the feature and saving the settings.
- Bug Fix: Enabling or disabling the Hide Backend feature will update the “Log Out” link so that it works as expected without having to load a new page.
- Bug Fix: Enabling or disabling the Hide Backend feature now properly updates the .htaccess/nginx.conf file on enable and disable rather than at some future point.
- Bug Fix: Fixed issue that could cause improper database table creation on multisite sites.
- Bug Fix: Fixed a bug that could prevent settings from saving properly if the site was migrated to a new server or a new home path on the server.
- Bug Fix: Fixed bug that prevented Away Mode from activating on some sites.
- Enhancement: Added logging for failed two-factor, OAuth, and REST API authentications.
- Enhancement: Added logging details about the source of login failures and the type of authentication that failed.
- Enhancement: Due to improvements in tracking authentication failures, brute force attempts using alternate authentication methods are more reliably found and blocked.
- Enhancement: The server’s IP is treated as whitelisted and will not be considered for lockouts or bans.
- Enhancement: Reduced memory usage when creating a backup.
- Enhancement: Changed log entry description of “IP Flagged as bad by iThemes IPCheck” to “IP Flagged by Network Brute Force Protection”. This should help clarify the meaning of the log entry.
- Enhancement: Improved efficiency of the Network Brute Force Protection feature.
- Bug Fix: Fixed bug that prevented Network Brute Force Protection from working properly on some sites.
- Bug Fix: Removed “comodo” from the list of user agents blocked by the HackRepair.com blacklist. This ensures that Comodo’s AutoSSL feature of cPanel/WHM is able to function.
- Updated Feature: Updated the “REST API” feature in the WordPress Tweaks section. The feature now has proper support for protecting privacy on your site without preventing the REST API from functioning.
- Enhancement: Updated Security Check to enforce setting the “REST API” setting to “Restricted Access”.
- New Feature: Added a “REST API” feature in the WordPress Tweaks section. This new feature allows you to block or restrict access to the REST API.
- Bug Fix: Fixed issue that could cause database backup emails to be sent without the backup zip attached.
- Enhancement: Updated the lockouts notification email to a new design. This new design also cleaned up the translation strings to allow better translations.
- New Feature: Added a “Protect Against Tabnapping” feature in the WordPress Tweaks section. Details of what this feature protects against can be found here: https://www.jitbit.com/alexblog/256-targetblank—the-most-underestimated-vulnerability-ever/
- Misc: Updated the description for the Lockout Period setting to indicate that the default value of 15 minutes is recommended.
- Bug Fix: Remote IP is now correctly identified if the server is behind a reverse proxy that sends requests with more than one IP listed in a single header.
- Bug Fix: Fixed the link for a user in the logs page so that it properly works on sites that are inside a subdirectory.
- Bug Fix: Improved how Strong Password Enforcement works on password resets to improve compatibility with various plugins.
- Bug Fix: Improved the logic for determining whether a user should have Strong Password Enforcement applied. This covers situations where the user may have a custom role, a customized default role, or added capabilities beyond their role.
- Enhancement: Improved the logic for determing the requesting IP address to better handle situations where the site is behind a reverse proxy.
- Enhancement: Strong Password Enforcement now uses a PHP port of zxcvbn to ensure that a strong password was selected.
- Enhancement: All links in Security that have target=”_blank” now have added rel attributes to protect against tabnapping.
- Misc: Updated remaining ip-lookup.net links to instead link to traceip.net in keeping with other links that were previously updated to traceip.net.
- Bug Fix: Fixed data save issue that could cause multiple notification emails to be sent in a short period of time.
- Bug Fix: Fixed issue that could cause the malware scanner to fail on sites that change the arg_separator.output php.ini value from its default value.
- Bug Fix: Removed redundant entries in the HackRepair blacklist.
- Bug Fix: Enabling Protect System Files in System Tweaks will now only block install.php for the current site. This fixes the issue where the setting can block installation of a site in a subdirectory.
- Bug Fix: Fixed problem that could cause requests for iThemes Security data from iThemes Sync to fail due to large amounts of log entries.
- Bug Fix: Scheduled backups now run if the ITSEC_BACKUP_CRON define is set with a non-boolean value.
- Bug Fix: Replaced static references to wp-includes with the WPINC define.
- Bug Fix: Moved blocking of query strings containing %0[0-9A-F] characters from the Non-English Characters setting to the Suspicious Query Strings setting as those characters are control code characters and are not associated with a language.
- Bug Fix: Added escaping to some translation strings.
- Bug Fix: Removed unused files from the WordPress Tweaks module directory.
- Bug Fix: Fixed the Daily Digest email reversing the user and host lockout counts.
- Bug Fix: The database backup email no longer sends from the email address configured in Settings > General. It now defaults to the same from address that the wp_mail() function uses. This will fix the mail being blocked by some mail servers due to a spoofed from address.
- Enhancement: Updated the server config rules generated by the System Tweaks settings. They are now more consistent between Apache, LiteSpeed, and nginx. They are also more efficient and have been improved to limit accidentally blocking non-targeted requests.
- Enhancement: Updated the database backup email to a new design.
- Enhancement: Added a note that the Filter Request Methods setting in System Tweaks should not be enabled if the WordPress REST API is used. This is becasue the DELETE HTTP method is blocked when the setting is enabled.
- New Feature: Added setting to block requests for PHP files in the plugins directory in System Tweaks.
- New Feature: Added setting to block requests for PHP files in the themes directory in System Tweaks.
- Bug Fix: Fixed issue that reported invalid counts for host and user lockouts in the daily digest email.
- Bug Fix: Fixed issue that caused the daily digest email to be sent every day, even if no lockouts occurred and no file changes were found.
- Bug Fix: Fixed issue that could prevent saving of File Change settings, resulting in an error messages of “A validation function for file-change received data that did not have the required entry for latest_changes.”
- Bug Fix: Fixed iThemes Security Pro logo appearing in daily digest emails.
- Bug Fix: Removed the “Wget” user agent from the Hack Repair blacklist as it can block wp-cron jobs on some hosts.
- Bug Fix: Fixed error “PHP message: PHP Fatal error: ‘continue’ not in the ‘loop’ or ‘switch’ context”.
- Enhancement: Added new Daily Digest email design.
- Security Fix: Fixed issue where a locked out but not yet blacklisted IP/user could receive different HTTP headers when testing a valid username/password combination. Thanks Leon Atkinson of 18INT for contacting us about this issue.
- Security Fix: Updated log output to prevent specific kinds of logged requests from displaying without sanitization. Thanks to Slavco Mihajloski for contacting us about this issue.
- Bug Fix: The Security > Security Check link now works as expected in multisite.
- Bug Fix: Fixed bug that could prevent the “Filter Long URL Strings” feature from working properly.
- Bug Fix: Removed restrictions in the “Filter Long URL Strings” feature that were unrelated to request length.
- Bug Fix: Corrected a settings description typo in Global Settings.
- Bug Fix: Fixed bug that could result in issues authenticating over XML-RPC when the WordPress Tweaks > Multiple Authentication Attempts per XML-RPC Request setting is set to “Block”.
- Misc: Added placeholder for the Version Management module of iThemes Security Pro.
- Misc: Updated build number to trigger some updates.
- Bug Fix: Fixed a potential logging issue that could prevent some lockout notices from being properly logged on non-English sites.
- Bug Fix: Prevented some notices from displaying to users who do not need to see them.
- Bug Fix: Limited notices to only display on specific pages on the dashboard.
- Compatibility Fix: Changed name of the $HTTP_RAW_POST_DATA variable to avoid erroneously tripping PHP 7 compatibility checks.
- Code Cleanup: Removed legacy code that is no longer needed.
- Enhancement: Started tracking when a user was last seen as logged in and active for future use.
- Misc: Added a placeholder for the Pro feature “User Security Check”.
- New Feature: Added a new Security Check section on the settings page. This new feature adds a tool to quickly ensure that the recommended features are enabled and the recommended settings are used.
- Bug Fix: Fixed the ability to remove the itsec_away.confg file in order to disable Away Mode.
- Enhancement: The “Ban Lists” setting of Banned Users is now enabled by default.