Intranet & Private Site – All-In-One Intranet
Plenty of companies run their intranet on WordPress. The problem is that WordPress was built for public-facing sites. Making it work as a private intranet typically requires installing multiple plugins, configuring each one separately, and hoping they all play nicely together. All-In-One Intranet turns your WordPress site into a fully private intranet from a single plugin. Enable privacy with one checkbox, set up auto-logout to protect sensitive information, configure where users land after login, and manage multisite access controls, all from one settings page. Corporate intranet, private knowledge base, restricted client portal, internal comms hub: the privacy and access control are the same job in each case, and this plugin does that part. What is an Intranet? An intranet is a private website or network used internally by an organization. Unlike a public website, an intranet is only accessible to authorized users: typically employees, contractors, or specific team members. Common uses for a WordPress intranet include: Internal company communications and announcements Employee handbooks, policies, and procedures Knowledge bases and documentation wikis Project collaboration and team coordination HR portals for onboarding and training materials Client portals with restricted access to project files WordPress already has the editing interface and the user roles for all of these. What it does not have is the access control layer, which is what All-In-One Intranet adds. Features All-In-One Intranet has five features, covering what most intranets need: One-Click Private Site Enable the “Force site to be entirely private” checkbox, and your entire WordPress site becomes restricted to logged-in users only. Anyone who is not logged in gets redirected to the WordPress login page automatically. This single setting handles multiple layers of privacy at once: Page and post access – all frontend content requires authentication REST API protection – unauthenticated REST API requests are blocked with a 401 error, so data cannot leak through the API XML-RPC blocking – XML-RPC is disabled entirely when privacy is active Search engine blocking – the robots.txt file is automatically updated to disallow all crawling, so your private content stays out of search indexes Pingback suppression – outgoing pingbacks and trackbacks are disabled so your private site does not announce itself to external services Feed protection – RSS, Atom, and comment feeds require authentication, so protected posts and comments cannot be read through /feed/ or crafted feed URLs Comment and trackback blocking – unauthenticated visitors cannot post comments or trackbacks to protected content through wp-comments-post.php or wp-trackback.php Admin endpoint gating – the admin-ajax.php and admin-post.php handlers require a valid login, so public “nopriv” actions registered by your theme or other plugins do not run for logged-out visitors. A short allowlist keeps the handlers people need before login working: two-factor and passkey plugins, and connected site-management platforms Entry-point coverage – WordPress files that load the site outside the normal page render, such as wp-links-opml.php (the blogroll and OPML export) and wp-activate.php, are sealed so they cannot leak post content, feeds, your site title, or the WordPress version Slug enumeration prevention – WordPress’s canonical redirect does not reveal the slugs of private posts to unauthenticated visitors on pretty permalinks Role and membership enforcement – the REST API and comment gates apply the same role and sub-site membership checks as the rest of the site, so a logged-in user with no role, or who is not a member of the current sub-site, is blocked there too The plugin also watches your registration settings: if “Anyone can register” is enabled, or open registration is allowed on a multisite network, a warning appears on the settings page so you can fix it. Auto-Logout for Inactive Users Shared workstations and forgotten browser tabs are a security risk for intranets. The auto-logout feature lets you set a maximum idle time (in minutes, hours, or days) after which users are automatically logged out. The plugin tracks when each browser session was last active. On every page load, it checks whether the configured idle time has been exceeded. If a session has been idle for too long, the user is logged out immediately and redirected back to the page they were viewing, which triggers the login wall if the site is private. Each session keeps its own timer, so staying active at your desk does not keep a forgotten login on a shared machine alive. This protects sensitive company information without requiring users to remember to log out manually. Set it to 30 minutes for high-security environments, a few hours for typical office use, or leave it blank to disable the feature entirely. Auto-logout counts browser sessions only. A request that authenticates without a login cookie (a site management dashboard using its own API, or a script using an application password) has no session to expire, so it is left alone. Custom Login Redirect By default, WordPress sends users to the dashboard after they log in. For an intranet, this is not useful: your team is logging in to read content, not to manage the site. The login redirect feature lets you set any URL on your site as the post-login landing page. Point it to your company homepage, a news feed, or a team dashboard so users see relevant content right away. This redirect only applies when users log in directly through the standard WordPress login page. A user who was redirected to the login page from a specific URL is sent back to that URL instead. Multisite Sub-site Privacy If you run a WordPress multisite network, you can require logged-in users to be members of a specific sub-site before they can view it. This is useful for organizations with multiple departments, teams, or client areas, each with their own sub-site that should only be visible to relevant people. When a user who is logged in but not a member of the current sub-site tries to access it, they see a message listing all the sub-sites they do have access to, with clickable links to navigate there. Access to the Network Admin area is never restricted by this setting. This option works in combination with the main privacy setting: enable private site first, then add sub-site membership requirements on top of it. Multisite Default Role Assignment Managing user access across multiple sub-sites in a WordPress network can be tedious: every new user and every new sub-site means assigning roles by hand. The default role assignment feature automates this. Choose a role (Subscriber, Editor, Administrator, or any custom role), and the plugin handles the rest: When a new user is created, they are automatically added to every active sub-site in the network with the selected role When a new sub-site is created, all existing users are automatically added to it with the selected role How to Make Your WordPress Site Private It takes about a minute to make your WordPress site private with All-In-One Intranet: Install and activate the plugin from the WordPress plugin directory Go to Settings > All-In-One Intranet in your WordPress admin (or Network Admin > Settings > All-In-One Intranet for multisite) Check the box labeled “Force site to be entirely private” Click Save Changes That is all it takes. Your site is now private. Any visitor who is not logged in will be redirected to the WordPress login page. The REST API, XML-RPC, and search engine indexing are all locked down automatically. If you see a warning about registration settings, follow its link to disable open registration. How to Set Up Auto-Logout for Inactive Users The auto-logout feature protects your intranet from unattended browser sessions: Go to Settings > All-In-One Intranet Find the Auto Logout section Enter a number in the time field (e.g., 30) Select the time unit from the dropdown: Minutes, Hours, or Days Click Save Changes Users who are inactive for longer than the configured period will be logged out on their next page interaction. Their activity timer resets on every page load, so active users are never interrupted. The timer belongs to the browser session, so being active in one browser does not keep the same account signed in on another machine. To disable auto-logout, clear the time field and save. How to Configure Login Redirect To send users to a specific page after they log in: Go to Settings > All-In-One Intranet Find the Login Redirect section Enter the full URL of your desired landing page (e.g., https://example.com/welcome) Click Save Changes Users who log in via /wp-login.php will now land on that page instead of the WordPress dashboard. Users who were redirected to the login page from a specific URL will still return to that URL after logging in. How to Set Up a WordPress Multisite Intranet For organizations running a WordPress multisite network: Go to Network Admin > Settings > All-In-One Intranet Enable “Force site to be entirely private” to restrict the entire network to logged-in users Optionally enable “Require logged-in users to be members of a sub-site to view it” for per-site access control Under Sub-site Membership, select a default role to automatically assign users to sub-sites Click Save Changes The privacy and membership settings apply network-wide. The default role assignment runs automatically when new users or new sub-sites are created. Existing sub-sites and users are not affected retroactively when you change the role setting. Security Features All-In-One Intranet takes a layered approach to access control: Authentication enforcement – uses WordPress’s built-in auth_redirect() function for reliable login redirection REST API lockdown – blocks unauthenticated API requests to endpoints like /wp-json/wp/v2/posts XML-RPC disabling – completely disables XML-RPC when privacy is active No-role user handling – on single-site installations, users who are logged in but have no assigned role are logged out and shown an error message, so an account deactivated by removing its role cannot get in Registration monitoring – warns you if WordPress is configured to allow open registration, which would undermine your private site setup Nonce verification and capability checks – settings forms use WordPress nonce validation, and settings pages require manage_options (single site) or manage_network_options (multisite) Media uploads (images, PDFs, etc.) remain accessible to anyone who knows their direct URL. This is a limitation of how WordPress stores media files and is common to most privacy plugins. If you need to protect individual file downloads, consider a dedicated file protection plugin alongside All-In-One Intranet. For Developers All-In-One Intranet provides the aioi_allow_public_access filter for developers who need to make specific pages or endpoints accessible without authentication. This filter runs during both the template redirect check and the REST API dispatch check. Return true to allow public access for the current request: add_filter( 'aioi_allow_public_access', function( $allow ) { // Allow public access to a specific page if ( is_page( 'public-landing' ) ) { return true; } return $allow; } ); This is useful for exposing specific landing pages, webhook endpoints, or custom API routes while keeping the rest of the site private. Two more filters cover login-screen plugins, which have to finish their authentication exchange while the visitor is still logged out. aioi_public_actions lists the admin-ajax.php / admin-post.php actions that may still run while the site is private, and aioi_public_rest_routes does the same for plugins that verify a second factor over the REST API, matching a route exactly or as a path segment prefix. Two-factor and passkey plugins are already covered out of the box, and every bundled entry applies only while the plugin it belongs to is active, so a private site never leaves an endpoint open for a plugin it does not run. Only add authentication endpoints to either list. Anything on them can be called by logged-out visitors, so it must not return site content, and it must do its own credential or token check. Site-management platforms are the deliberate exception, because returning site content is their whole purpose. See the next section. Site Management Dashboard Compatibility Many agencies and IT teams look after every site they run from a central dashboard that handles updates and backups. Making a site private should not cut it off from that dashboard, so these connector plugins are supported out of the box, with nothing to configure: ManageWP Worker – also the connector used by GoDaddy Pro MainWP Child InfiniteWP Client WP Umbrella WP Remote Each of these talks to its dashboard over its own signed protocol rather than a browser login. Site syncing, plugin and theme updates, backups, and the dashboard’s one-click login into wp-admin all keep working with “Force site to be entirely private” enabled. ManageWP, MainWP and InfiniteWP answer their dashboards from their own hooks, before the privacy gate runs, so nothing needs to be opened for them. The other two each need one narrow exemption, granted only to a request the platform itself has already vouched for. WP Umbrella works entirely through the WordPress REST API, which a private site otherwise closes, so its own namespace opens only for a request presenting WP Umbrella’s credentials, and the admin-ajax.php calls it makes back to itself open only for a request carrying the nonce those handlers verify. WP Remote routes part of its traffic through admin-ajax.php, and that one action opens only once WP Remote has checked the caller’s signature and registered its handler. An anonymous request to either still meets the login wall, a credentialed one still has to satisfy the platform’s own checks, and every other route, action and page stays private. Auto-logout handles those background calls too: a dashboard request is never logged out in the middle of an API call, and it does not count as the connected administrator’s own activity, so frequent polling cannot hold a real person’s session open past the idle limit you set. A private site does still hide anything a service fetches anonymously from its own servers: uptime monitoring, broken-link checking, and SEO or page-speed scans. Those requests carry no login, so they get the login redirect and the dashboard usually reports the site as down or its links as broken. That applies to every external service, not only these five.
Top keywords
- site33×1.42%
- wordpress27×1.16%
- private25×1.07%
- intranet23×0.99%
- users23×0.99%
- login21×0.90%
- page20×0.86%
- access14×0.60%
- role14×0.60%
- api13×0.56%
- all-in-one12×0.51%
- all-in-one intranet12×0.51%
Login Security Solution
A simple way to lock down login security for multisite and regular WordPress installations. Blocks brute force and dictionary attacks without inconveniencing legitimate users or administrators Tracks IP addresses, usernames, and passwords Monitors logins made by form submissions, XML-RPC requests and auth cookies If a login failure uses data matching a past failure, the plugin slows down response times. The more failures, the longer the delay. This limits attackers ability to effectively probe your site, so they’ll give up and go find an easier target. If an account seems breached, the “user” is immediately logged out and forced to use WordPress’ password reset utility. This prevents any damage from being done and verifies the user’s identity. But if the user is coming in from an IP address they have used in the past, an email is sent to the user making sure it was them logging in. All without intervention by an administrator. Can notify the administrator of attacks and breaches Supports IPv6 Thoroughly examines and enforces password strength. Includes full UTF-8 character set support if PHP’s mbstring extension is enabled. The tests have caught every password dictionary entry I’ve tried. Minimum length (customizable) Doesn’t match blog info Doesn’t match user data Must either have numbers, punctuation, upper and lower case characters or be very long. Note: alphabets with only one case (e.g. Arabic, Hebrew, etc.) are automatically exempted from the upper/lower case requirement. Non-sequential codepoints Non-sequential keystrokes (custom sequence files can be added) Not in the password dictionary files you’ve provided (if any) Decodes “leet” speak The password/phrase is not found by the dict dictionary program (if available) Blocks discovering user names via the “?author=” query string Password aging (optional) (not recommended) Users need to change password every x days (customizable) Grace period for picking a new password (customizable) Remembers old passwords (quantity is customizable) Administrators can require all users to change their passwords Done via a flag in each user’s database entry No mail is sent, keeping your server off of spam lists Logs out idle sessions (optional) (idle time is customizable) Maintenance mode (optional) Publicly viewable content remains visible Disables logins by all users, except administrators Logs out existing sessions, except administrators Disables posting of comments Useful for maintenance or emergency reasons This is separate from WordPress’ maintenance mode Prevents information disclosures from failed logins Improvements Over Similar WordPress Plugins Multisite network support Monitors authentication cookies for bad user names and hashes Tracks logins from XML-RPC requests Adjusts WordPress’ password policy user interfaces Takes security seriously so the plugin itself does not open your site to SQL, HTML, or header injection vulnerabilities Notice-free code means no information disclosures if display_errors is on and error_reporting includes E_NOTICE Only loads files, actions, and filters needed for enabled options and the page’s context Provides an option to have deactivation remove all of this plugin’s data from the database Uses WordPress’ features rather than fighting or overriding them No advertising, promotions, or beacons Proper internationalization support Clean, documented code Unit tests covering 100% of the main class Internationalized unit tests For reference, the similar plugins include: 6Scan Security Better WP Security Enforce Strong Password Force Strong Passwords Limit Login Attempts Login Lock Login LockDown PMC Lockdown Simple Login Lockdown Wordfence Security WP Login Security WP Login Security 2 Compatibility with Other Plugins Some plugins provide similar functionality. These overlaps can lead to conflicts during program execution. Please read the FAQ! Translations Deutsche, Deutschland (German, Germany) (de_DE) by Christian Foellmann Français, français (French, France) (fr_FR) by mermouy and and Fx Bénard Italiano, Italia (Italian, Italy) (it_IT) by Daniele Passalacqua 日本語, 日本国 (Japanese, Japan) (ja_JP) by motoyamayuki Nederlands, Nederland (Dutch, Netherlands) (nl_NL) by Friso van Wieringen polski, Polska (Polish, Poland) (pl_PL) by Michał Seweryniak miniol Português, Brasil (Portugese, Brazil) (pt_BR) by Valdir Trombini suomi, Suomi (Finnish, Finland) (fi_FI) by Juha Remes Newman101 Source Code, Bugs, and Feature Requests Development of this plugin happens on GitHub. Please submit bug and feature requests, pull requests, wiki entries there. Releases are then squashed and pushed to WordPress’ Plugins SVN repository. This division is necessary due having being chastised that “the Plugins SVN repository is a release system, not a development system.” Old tickets are in the Plugins Trac. Strong, Unique Passwords Are Important Yeah, creating, storing/remembering, and using a different, strong password for each site you use is a hassle. But it is absolutely necessary. Password lists get stolen on a regular basis from big name sites (like Linkedin for example!). Criminals then have unlimited time to decode the passwords. In general, 50% of those passwords are so weak they get figured out in a matter of seconds. Plus there are computers on the Internet dedicated to pounding the sites with login attempts, hoping to get lucky. Many people use the same password for multiple sites. Once an attacker figures out your password on one site, they’ll try it on your accounts at other sites. It gets ugly very fast. But don’t despair! There are good, free tools that make doing the right thing a piece of cake. For example: KeePassX, KeePass, or 1Password Securing Your WordPress Site is Important You’re probably thinking “There’s nothing valuable on my website. No one will bother breaking into it.” What you need to realize is that attackers are going after your visitors. They put stealth code on your website that pushes malware into your readers’ browsers. According to SophosLabs more than 30,000 websites are infected every day and 80% of those infected sites are legitimate. Eighty-five percent of all malware, including viruses, worms, spyware, adware and Trojans, comes from the web. Today, drive-by downloads have become the top web threat. — Security Threat Report 2012 So if your site does get cracked, not only do you waste hours cleaning up, your reputation gets sullied, security software flags your site as dangerous, and worst of all, you’ve inadvertently helped infect the computers of your clients and friends. Oh, and if the attack involves malware, that malware has probably gotten itself into your computer. Actions login_security_solution_insert_fail login_security_solution_notify_breach login_security_solution_notify_fail login_security_solution_fail_tier_dos Filters The following filters allow customizing email subjects and messages. If either the “subject”or “message” filters in a method returns an empty string, the given method will skip calling wp_mail(). login_security_solution_notify_breach_subject login_security_solution_notify_breach_message login_security_solution_notify_breach_user_subject login_security_solution_notify_breach_user_message login_security_solution_notify_fail_subject login_security_solution_notify_fail_message Unit Tests A thorough set of unit tests are found in the tests directory. The plugin needs to be installed and activated before running the tests. To execute the tests, cd into this plugin’s directory and call phpunit tests Translations can be tested by changing the WPLANG value in wp-config.php. Please note that the tests make extensive use of database transactions. Many tests will be skipped if your wp_options and wp_usermeta tables are not using the InnoDB storage engine. Removal This plugin offers the ability to remove all of this plugin’s settings from your database. Go to WordPress’ “Plugins” admin interface and click the “Settings” link for this plugin. In the “Deactivate” entry, click the “Yes, delete the damn data” button and save the form. Use WordPress’ “Plugins” admin interface to click the “Deactivate” link Remove the login-security-solution directory from the server In the event you didn’t pick the “Yes, delete the damn data” option or you manually deleted the plugin, you can get rid of the settings by running three queries. These queries are exapmles, using the default table name prefix of, wp_. If you have changed your database prefix, adjust the queries accordingly. DROP TABLE wp_login_security_solution_fail; DELETE FROM wp_options WHERE option_name LIKE 'login-security-solution%'; DELETE FROM wp_usermeta WHERE meta_key LIKE 'login-security-solution%';= Inspiration and References = Password Research Why passwords have never been weaker — and crackers have never been stronger, Dan Goodin You can never have too many passwords: techniques for evaluating a huge corpus, Joseph Bonneau Analyzing Password Strength, Martin Devillers Consumer Password Worst Practices, Imperva Preventing Brute Force Attacks on your Web Login, Bryan Rite Password Strength, Randall Munroe Technical Info The Extreme UTF-8 Table, infosnel.nl A Recommendation for IPv6 Address Text Representation, Seiichi Kawamura and Masanobu Kawashima Password Lists Dazzlepod Password List, Dazzlepod Common Passwords, Fravia The Top 500 Worst Passwords of All Time, Mark Burnett To Do Provide a user interface to the fail table.