Initial assessment without passwords Quote before intervention One accountable specialist from start to finish

Database Users Seo Spam

Suspicious Options in `wp_options`: How to Review Them Without Breaking the Site

Inspect suspicious wp_options rows by owner, size, autoload, content and code references before making reversible targeted changes.

wp_options stores core settings, plugin configuration, transients, cron, widget data and sometimes injected scripts. A random-looking name or encoded value can be malicious, cached data or a legitimate vendor key.

Never delete rows merely because a scanner labels them suspicious.

Work on a protected database copy

Create a consistent backup and restore it to an isolated environment. Record the actual table prefix; it may not be wp_.

Restrict exports because options can contain SMTP/API credentials, personal data and session-related values.

Use read-only queries for discovery. Do not display complete values in shared terminal output or reports.

Rank investigation targets

Review recently changed options where audit evidence exists, large autoloaded values, exact malicious domains/strings and names with no known owner.

A size query can identify unusual rows:

SELECT option_name, autoload, LENGTH(option_value) AS bytes
FROM wp_options
ORDER BY LENGTH(option_value) DESC
LIMIT 50;

Adjust the prefix and run only on authorised data. Size is a priority signal, not a malware finding.

Attribute the option to code

Search verified plugin/theme/custom code for the exact option name and calls to get_option, update_option or delete_option. Check whether the owning component is active and maintained.

Transients and generated settings may be recreated automatically. An abandoned plugin option can be harmless residue; a compromised active callback can restore a deleted payload.

Document the expected value type and update lifecycle.

Inspect serialised and structured values safely

PHP-serialised data includes string lengths. Editing raw text can corrupt the whole option. JSON and builder data also need structure-aware handling.

Use WordPress APIs or the owning plugin interface in staging. Decode for inspection without evaluating embedded PHP or JavaScript.

Do not pass a suspicious value to unserialize with object instantiation in an unsafe environment; use WordPress-aware, constrained analysis tools.

Distinguish stored payload from loader

An option can contain malicious JavaScript, a remote domain or encoded PHP, while a plugin/theme/snippet decides when to render or write it.

Trace where the value is consumed. Clean both the option and the compromised loader or vulnerable settings endpoint.

Check cron and unknown administrators that may rewrite it.

Treat the cron option as a special case

WordPress stores its basic scheduled-event array in an option. It is serialised, timestamp-indexed and expected to look complex. Editing it directly can remove scheduled posts, updates, backups or WooCommerce-related callbacks.

Inspect events with WP-CLI or a trusted cron-management interface, attribute each suspicious hook to code and unschedule only the confirmed event. Remove its registering callback first so the database value does not regenerate on the next request.

Make a reversible targeted change

Export the exact row and take a fresh backup. Use the plugin’s reset/cleanup function where trustworthy, or update/delete the named option through reviewed WordPress code.

Change one confirmed item at a time and record the expected application behaviour. Avoid prefix-based wildcard deletion.

Clear relevant object/page cache after the database change through supported controls.

Verify function and non-recurrence

Test public pages, administration, forms, scheduled tasks and WooCommerce settings related to the owner. Search for the malicious indicator in database and rendered HTML.

Monitor the option across normal cron/settings saves and the prior recurrence period.

Compare autoload size and PHP errors before and after so cleanup has not created a performance or configuration regression.

When database expertise is needed

Request help when options are serialised, contain secrets or return after deletion. Send option names, sizes and hashes with values redacted.

The safe outcome preserves legitimate configuration, removes confirmed payloads and repairs the code or access that stored them.

BEFORE YOU SEND THE REQUEST

Frequently asked questions.

Do you ask for passwords in the form?+

No. The public form never requests access. Secure credentials are requested only after the scope and quote are approved.

Who reviews the incident?+

The request goes to Jordi Ensenyat, founder of Code Barcelona and a WordPress specialist with more than 15 years of experience.

Is anything changed before the quote?+

No. Visible symptoms and scope are reviewed first. Intervention begins after approval and with a rollback path prepared.

Do you work internationally?+

Yes. WP Repair handles WordPress and WooCommerce incidents in English and Spanish through a remote service.

Assess my incident