WP Manifestindependent plugin directory
manifest / developer / wp-debug-log-widget

Debug Log Widget WP Registry grade D+. High-severity findings · 2 findingsWP RegistryHigh-severity findings · 2 findingsOpen the reportD+ #7 in Developer Tools

Adds an admin dashboard widget to parse the WordPress error log file.

★ 9stars
23krelease downloads
≈60active sites
4.3kcomposer installs
v1.5.0.1latest · 1 year ago

Install

Download wp-debug-log-widget.zip From the v1.5.0.1 release on GitHub, Jul 13, 2025

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/thefrosty/wp-debug-log-widget/releases/download/v1.5.0.1/wp-debug-log-widget.zip

On Packagist as thefrosty/wp-debug-log-widget:

composer require thefrosty/wp-debug-log-widget
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

WordPress Debug Log Widget

Debug Log Widget

Adds an admin dashboard widget to parse the WordPress error log file.

Package Installation (via Composer)

To install this package, edit your composer.json file:

{
    "require": {
        "thefrosty/wp-debug-log-widget": "^1.5"
    }
}

Then run:

$ composer install thefrosty/wp-debug-log-widget

Or, run:

$ composer require thefrosty/wp-debug-log-widget:^1.5

Releases

21 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v1.5.0.1 latest
Jul 13, 2025 1 year ago
wp-debug-log-widget.zip +1 asset
12
wp-debug-log-widget.zip8
wp-debug-log-widget-1.5.0.1.zip4
Apr 26, 2025 1 year ago
wp-debug-log-widget.zip +1 asset
9
wp-debug-log-widget.zip2
wp-debug-log-widget-1.5.0.zip7
Dec 8, 2024 1 year ago
wp-debug-log-widget.zip +1 asset
78
wp-debug-log-widget.zip1
wp-debug-log-widget-1.4.5.zip77
Dec 8, 2024 1 year ago
tag only
—
Dec 4, 2024 1 year ago
wp-debug-log-widget.zip +1 asset
944
wp-debug-log-widget.zip0
wp-debug-log-widget-1.4.3.zip944
Nov 25, 2024 1 year ago
wp-debug-log-widget.zip +1 asset
63
wp-debug-log-widget.zip1
wp-debug-log-widget-1.4.2.zip62
Nov 23, 2024 1 year ago
wp-debug-log-widget.zip +1 asset
70
wp-debug-log-widget.zip0
wp-debug-log-widget-1.4.1.zip70
Nov 23, 2024 1 year ago
wp-debug-log-widget.zip +1 asset
0
wp-debug-log-widget.zip0
wp-debug-log-widget-1.4.0.zip0
Mar 8, 2024 2 years ago
wp-debug-log-widget.zip +1 asset
2
wp-debug-log-widget.zip2
wp-debug-log-widget-1.3.0.zip0
Nov 9, 2023 2 years ago
wp-debug-log-widget.zip +1 asset
963
wp-debug-log-widget.zip4
wp-debug-log-widget-1.2.0.zip959
Aug 10, 2022 4 years ago
wp-debug-log-widget.zip +1 asset
628
wp-debug-log-widget.zip10
wp-debug-log-widget-1.1.5.zip618
Mar 2, 2022 4 years ago
wp-debug-log-widget.zip +1 asset
2,736
wp-debug-log-widget.zip5
wp-debug-log-widget-1.1.4.zip2,731
Jan 15, 2022 4 years ago
wp-debug-log-widget.zip +1 asset
14,890
wp-debug-log-widget.zip6
wp-debug-log-widget-1.1.3.zip14,884
Nov 20, 2021 4 years ago
tag only
—
May 30, 2021 5 years ago
wp-debug-log-widget.zip
4
May 30, 2021 5 years ago
wp-debug-log-widget.zip +1 asset
2,342
wp-debug-log-widget.zip8
wp-debug-log-widget-.RELEASE_VERSION.zip2,334
May 30, 2021 5 years ago
wp-debug-log-widget.zip +1 asset
12
wp-debug-log-widget.zip6
wp-debug-log-widget-.RELEASE_VERSION.zip6
May 20, 2021 5 years ago
tag only
—
Oct 16, 2020 6 years ago
wp-debug-log-widget.zip
2
Oct 16, 2020 6 years ago
wp-debug-log-widget.zip +1 asset
6
wp-debug-log-widget.zip3
wp-debug-log-widget-1.0.0.zip3
Oct 14, 2020 6 years ago
wp-debug-log-widget.zip +1 asset
8
wp-debug-log-widget.zip3
wp-debug-log-widget-1.0.0-RC1.zip5

Active-site estimate ≈60 comes from the median of recent superseded releases. Method.

D+ grade

Security

Debug Log Widget 1.5.0.1 · audited by WP Registry

High-severity findings.

1 high 1 medium
Audited release
1.5.0.1
Findings
2
Worst severity
high
Content hash
8a86ece03810d30ba64aa4c9…

Findings

  • high Stored XSS: debug.log lines echoed as HTML in the admin dashboard widget

    xss_stored

    formatErrors() wraps the first [bracketed] segment in <strong> and then echoes the rest of each log line as HTML. Lines at or under $length (300 on the widget, 1000 on the VIEW action) skip strip_tags entirely; longer lines call strip_tags(..., 'strong') which, as a non-tag string, does not preserve markup but is not used for typical warning lines. A PHP 8 warning that interpolates request input (Undefined array key "<img src=x onerror=alert(document.domain)>") is 181 characters and is therefore printed raw into the Dashboard widget. The widget is registered for the administrator role (dashboardSetup) and the full-file VIEW is dumped to the response for super admins after a nonce check. debug.log is untrusted by nature (WP_DEBUG_LOG, notices from core/plugins/themes, stack traces). This is server-rendered admin HTML, not an innerHTML assignment, so script tags and event handlers execute in the administrator origin when they open Dashboard or click VIEW LOG FILE.

    src/ErrorLog.php:331-345

    Recommendation

    Escape every log line with esc_html() (or wp_kses with an empty allowlist) before output. If timestamps should be bold, escape first, then wrap a matched prefix in <strong>. Set a text/plain Content-Type and skip HTML formatting on the VIEW dump. Do not treat debug.log as trusted markup.

  • medium Missing capability check on wp_ajax_wp_debug_log_clear lets any logged-in user truncate debug.log

    missing_capability

    wpDebugLogClear is hooked to wp_ajax_wp_debug_log_clear and only verifies check_ajax_referer(ErrorLog::ACTION, 'nonce'). The sibling GET handler maybeRedirect refuses CLEAR/VIEW unless currentUserCan() (default is_super_admin) AND a valid nonce. enqueueScript() does not use that gate: on every Dashboard load (index.php, capability `read`) it wp_create_nonce()s the same action and inlines it into jQuery.post for all roles, including Subscriber. A subscriber who visits /wp-admin/ and POSTs action=wp_debug_log_clear&nonce=<that value> to admin-ajax.php gets fopen($logfile, 'w') which truncates or creates wp-content/debug.log. That destroys forensic evidence and is a state change the UI only offers to super admins. No nopriv hook, so unauthenticated users cannot call it.

    src/ErrorLog.php:246-256

    Recommendation

    Call currentUserCan() (or current_user_can('manage_options') / is_super_admin()) after the nonce check and wp_send_json_error if it fails. Only enqueue the clear script and nonce for users who pass that same gate.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.