Multiple layers of security are in place to protect WordPress applications:
- The VIP Code Analysis Bot (the Bot) automatically analyzes any code pushed to GitHub pull requests. Feedback from the Bot is posted on reviewed pull requests based on the results of automated scans including Vulnerability and Update Scan, PHPCS analysis, PHP linting, and SVG analysis.
- Plugins that are located in the
/pluginsdirectory of a WordPress environment’s wpcomvip GitHub repository branch are automatically scanned by Codebase Manager. Known security vulnerabilities and available version updates identified by Codebase Manager are reported in the VIP Dashboard’s Plugins panel. Pull requests to upgrade plugins with available updates can be created within the VIP Dashboard’s Plugins panel.
- Media files uploaded to
/wp-content/uploadsare not located in a web container’s filesystem. They are stored in a separate, read-only, globally distributed object store called the VIP File System.
- It is possible to programmatically write a file to the
/tmpdirectory of a web container or the
/wp-content/uploadsdirectory on the VIP File System. However, files written to either of those directories cannot be run or executed (e.g., PHP).
- Software stack version upgrades for security releases (e.g., WordPress core and VIP MU plugins) are automatically deployed to all environments on the platform as quickly as possible.
- The username
adminis disallowed for WordPress sites. Attempts to log in with the
adminusername will be blocked and the notice
Logins are restricted for that user. Please try a different user account.will be displayed.
- Forced Two-Factor Authentication (2FA) for administrators and custom roles with the
manage_optionscapability. Enabling 2FA is a security recommendation for all users.
- Single Sign On (SSO) can be enabled on any WordPress site.
- Customers have the ability to restrict site access for specific URLs, the WordPress admin, or for an entire site.
WP Cron, XML-RPC, and login endpoints
VIP has multiple security protections in place to protect against unauthorized access and abuse of the WP Cron, XML-RPC, and login endpoints.
- At the network level, dynamic security protocols are in place that can be triggered by unusual behavioral patterns. An automated attack would trigger VIP’s dynamic security measures, and login attempts would be completely blocked.
- Brute force attempts on
/xmlrpc.phpare detected and mitigated at the edge (i.e., firewall, NGINX). Attempts to obfuscate the URL of the WordPress login page by altering the URL—via a plugin or otherwise—will remove VIP’s brute force login protections from the login URL.
- Access to the
/xmlrpc.phpendpoint is restricted to authorized requests only.
- The XML-RPC server in WordPress core code prevents more than one failed authentication attempt per a
Rate limiting is a strategy to constrain how often an action can be repeated within a certain timeframe. The implementation of rate limiting can help to prevent some forms of malicious bot activity and to reduce strain on web servers. On the VIP Platform, rate limiting is in place at the application level for all WordPress sites, managed by VIP MU plugins, and at the edge.
The rate limiting threshold for XML-RPC requests at the edge is 10 times per minute, with a one-hour block timeout when this is exceeded. During the block timeout,
403s are returned. This rate is global and not customizable per application.
Logic applied to the login rate limiting threshold varies depending on the context. For example, for any given username+IP combination, the limit is 5 failed attempts every 5 minutes. This layer protects against more localized, user-specific attacks.
Filters can be applied to adjust the login limit thresholds:
wpcom_vip_ip_login_threshold(Login limiting IP threshold)
wpcom_vip_ip_username_login_threshold(Login limiting IP username threshold)
Last updated: August 03, 2023