A WordPress plugin is safe to trust when it is actively maintained, comes from a legitimate source, asks for no more access than its job needs, and is written by someone who checks permissions, verifies requests, cleans incoming data and handles file uploads strictly. You can judge the first three without reading any code, from the plugin's page and history. For the fourth, you ask the developer a short list of questions and listen to how clearly they answer.
This article is for site owners, marketing managers and agencies who install plugins or commission custom ones. It explains why plugins are the usual way into a hacked site, how to vet a plugin in ten minutes, what secure plugin work includes, the questions to ask and the warning signs.
#Why plugin security is a business risk
A plugin runs with the same power as WordPress itself, so a single unchecked form or endpoint can let a stranger change settings, read private data or upload a backdoor. For the business, that turns into a site that redirects visitors to scams, a store that leaks customer details, or a warning in search results that stops enquiries overnight.
The first principle on the WordPress developer security pages is simple: do not trust any data. Most plugin vulnerabilities come from breaking that rule in one of a few ways: a missing permission check, a request that is not verified, text printed on a page without being made safe, a database query built carelessly, or a file upload that accepts anything.
The cost of getting it wrong is far higher than the cost of choosing well. If it has already happened to you, my hacked WordPress site cleanup guide covers what recovery involves.
#How to vet a plugin without reading code
You can judge most plugins in about ten minutes from public information. Look at how the plugin is maintained, where it comes from and how much it wants to do.
| Check | Where to look | Good sign | Warning sign |
|---|---|---|---|
| Last update | Plugin page | Updated in recent months | No update for a year or more |
| Tested with current WordPress | Plugin page | Tested up to a recent version | An out-of-date notice |
| Changelog | Plugin page, Development tab | Regular releases, security fixes named and shipped quickly | No changelog, or fixes that took months |
| Support | Support forum | Questions answered | Many unanswered threads |
| Source | Where you download it | WordPress.org or the vendor's own site | A "free premium download" site |
| Scope | Description and settings | Does one job | Does many unrelated things, asks for broad access |
| Developer | Author profile, website | A named person or company with a history | No trace of who made it |
| Closure notice | Plugin page | None | "This plugin has been closed" |
The closure notice matters. The WordPress.org plugin guidelines (opens in a new tab) say that if a plugin is found to have security issues, it is closed until the situation is resolved. If a plugin you use has been closed, treat it as urgent: find out why and plan a replacement.
The same guidelines give you a baseline for plugins listed on WordPress.org: code must not be obfuscated (deliberately made unreadable), and a plugin may not contact outside servers or track users without explicit consent. They also state plainly that security is the ultimate responsibility of the plugin developer. A listing on WordPress.org is a useful filter, not a guarantee.
#Never use nulled plugins
A nulled plugin is a pirated copy of a paid plugin with the licence check removed. It cannot receive updates, and whoever removed the licence check could add anything else. A developer who offers "all premium plugins included" at no cost is often offering exactly this. Buy licences in your own name from the vendor.
#What secure plugin work includes
Secure plugin development comes down to six habits that every action in the plugin must follow. You do not need to check the code yourself, but knowing the habits lets you ask the right questions and understand the answers.
- Is this user allowed
- Was the request meant
- Clean what comes in
- Query the database safely
- Make output safe
- Restrict uploads
#Checking who is allowed
Every action that changes something or shows private data must first check that the user is permitted to do it. The WordPress handbook page on checking user capabilities (opens in a new tab) shows an example plugin that lets any visitor delete posts, simply because this check was skipped. A missing permission check is the most damaging mistake a plugin can make.
In code, the check is short. This is the kind of line a reviewer looks for before any sensitive action:
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( 'You are not allowed to do this.' );
}#Verifying the request was meant
A plugin must confirm that a request came from its own form or button, not from a trick link on another website. WordPress uses a short token called a nonce for this. The nonces documentation (opens in a new tab) is clear that nonces should never be relied on for access control, so the token always goes together with the permission check above, never in place of it.
#Cleaning what comes in
Everything a plugin receives, from forms, web addresses, other services or imported files, must be checked and cleaned before it is used or stored. WordPress's guidance on sanitising data (opens in a new tab) prefers strict validation (accept only what is expected) where possible, with cleaning as the fallback.
#Making output safe
Anything a plugin prints on a page must be treated so it shows as text and cannot run as code. This is called escaping, and it prevents cross-site scripting, where an attacker gets their own script to run in your visitors' browsers. The escaping documentation (opens in a new tab) recommends doing it as late as possible, at the moment of output.
#Safe database queries
When a plugin talks to the database, values from users must never be pasted straight into the query. WordPress provides a safe method for this, and a careful developer uses it for every query that includes a variable, or uses WordPress's own functions, which build safe queries for them. Skipping this allows SQL injection, where an attacker reads or changes the database directly.
#Protected connections and strict uploads
Plugins that offer an API (a way for apps or other systems to talk to the site) must decide who may call each address. The REST API handbook on custom endpoints (opens in a new tab) notes that open access is only for data that is meant to be public.
File uploads are the riskiest feature a plugin can offer, because one uploaded script can take over the site. The OWASP File Upload Cheat Sheet (opens in a new tab) recommends allowing only the file types the business needs, not trusting the type the browser reports, renaming files and limiting their size.
#Beyond the code
Secure work also shows in how changes are made. Good practice for anything that alters live data is to preview the change, keep a copy, and make it reversible.
#Questions to ask a plugin developer
A developer who takes security seriously answers these clearly and without hesitation. You are listening for specifics, not for a promise that "it will be secure".
| Question | A good answer sounds like | A weak answer sounds like |
|---|---|---|
| How do you decide who can use each feature? | "Every action checks the user's permission first, and I can show you where." | "Only admins will see the menu." |
| How do you protect forms and buttons from forged requests? | "Each one carries a token that is verified, together with the permission check." | "WordPress handles that." |
| What happens to data people type in? | "It is validated or cleaned on the way in and made safe on the way out." | "We trust our users." |
| How does the plugin query the database? | "Through WordPress functions or prepared queries only." | "Directly, it is faster." |
| Does it accept file uploads, and which types? | "Only the types you need, checked on the server, from permitted users." | "Any file." |
| Does it send data to any outside service? | A named list, with what is sent and why. | "I am not sure." |
| How will security fixes be delivered after launch? | "Through updates, with a changelog, for an agreed period." | "It will not need any." |
| Can someone else review the code? | "Yes, it is readable, documented and yours." | Reluctance, or encoded files. |
For custom work, put the answers into the agreement: who owns the code, how long fixes are covered and how updates are delivered. The broader hiring questions are in how to hire a web developer.
#Warning signs in a plugin or a developer
Some signs are strong enough to walk away on their own. They apply both to plugins you download and to custom work you pay for.
- Nulled or shared licences offered as a favour.
- Obfuscated or encoded files, so nobody can read what the plugin does.
- Admin access for everyone. The plugin only works if staff are all made administrators.
- Editing WordPress core or other plugins' files to make something work. The next update wipes it out or breaks the site.
- Testing on the live site, with no staging copy and no backup first.
- No update plan. The developer treats delivery as the end.
- One plugin that does everything. A larger plugin has more places to go wrong. The WordPress plugin best practices (opens in a new tab) page also asks developers to use unique names for their code so it does not clash with other plugins, which matters more as plugins grow.
- Settings or data visible without logging in. If you can see anything private in a logged-out browser window, report it.
- Vague answers to the questions in the table above.
#What good plugin practice looks like on your site
Good plugin security is also about how the site is run, and this part is in the owner's hands. A short routine prevents most incidents.
- Keep a list of every plugin, what it is for and who holds the licence.
- Remove plugins you no longer use. A deactivated plugin still sits on the server.
- Apply updates regularly, on a staging copy first for a store or a busy site.
- Keep automatic, tested backups stored away from the server.
- Give each person their own login with the lowest role that lets them do their job.
- Before adding a plugin, ask whether an existing one already does the job.
My website maintenance checklist sets out this routine month by month. Hosting matters too: an outdated server undermines careful plugin choices, which I cover in how to choose WordPress hosting in India.
#Ready plugin, custom plugin or code review
For common needs, a well-maintained plugin from a reputable author is usually safer than new custom code, because many other sites already run it and problems get found and fixed. Custom code is safer when the alternative is a large plugin of which you would use one small feature, or three plugins bent to do a job none was made for. I compare the two routes in custom WordPress plugin vs existing plugin.
A paid code review is worth it in three cases: before you install a little-known plugin on a store or a site holding personal data, when you inherit custom plugins from a previous developer, and when an agency is about to put its name on someone else's work. A review is far cheaper than a cleanup.
What you can do yourself is everything in the vetting table and the routine above. What needs a developer is reading the code, fixing what is found and building new plugins properly. That is the work covered by my WordPress plugin development service, and plugin conflict fixes cover problems in plugins you already run.
#Where to start
Open your plugin list today and run the vetting table against each one. Remove what you do not use, replace anything closed or abandoned, and note the licences that are not in your name. For custom plugins, send the developer the eight questions and keep the answers.
Agencies can add the six habits to their written quality standard for outside developers, as described in working with a white-label WordPress developer.
Frequently asked questions
Are plugins from WordPress.org safe?
They are safer than plugins from unknown sources, because the directory has guidelines and closes plugins with known security issues. That is a filter, not a guarantee, so still check the update history, support and scope before installing.
How many plugins is too many?
There is no fixed number. Risk comes from quality and upkeep, not the count. Ten well-maintained plugins are safer than three abandoned ones, though every extra plugin is one more thing to update and one more place a flaw can appear.
Is a paid plugin safer than a free one?
Not automatically. A paid plugin usually funds ongoing maintenance and support, which helps, but free plugins from active authors can be just as careful. Judge both on the same checks: updates, changelog, source and scope.
What should I do if a plugin I use has a known vulnerability?
Update it at once if a fixed version exists. If there is no fix, deactivate and remove it, replace it with a maintained alternative, and check the site for unknown admin users or changed files. Ask a developer to review the site if it holds customer data.
How can I tell if a custom plugin was built securely?
Ask the developer the questions in this article and request that the code be readable and handed over to you. For anything that handles payments, personal data or file uploads, an independent code review by a second developer is a sensible extra step.
Sources
The facts in this article were checked against these pages, last reviewed 12 November 2026.
- Detailed Plugin Guidelines, WordPress Plugin Handbookdeveloper.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/
- Plugin Best Practices, WordPress Plugin Handbookdeveloper.wordpress.org/plugins/plugin-basics/best-practices/
- Checking User Capabilities, WordPress Plugin Handbookdeveloper.wordpress.org/plugins/security/checking-user-capabilities/
- Nonces, WordPress Developer Resourcesdeveloper.wordpress.org/apis/security/nonces/
- Sanitizing Data, WordPress Developer Resourcesdeveloper.wordpress.org/apis/security/sanitizing/
- Escaping Data, WordPress Developer Resourcesdeveloper.wordpress.org/apis/security/escaping/
- Adding Custom Endpoints, REST API Handbookdeveloper.wordpress.org/rest-api/extending-the-rest-api/adding-custom-endpoints/
- File Upload Cheat Sheet, OWASPcheatsheetseries.owasp.org/cheatsheets/File_Upload_Cheat_Sheet.html




