WP Manifestindependent plugin directory

Laps WP Registry grade B. Medium-severity findings · 1 findingWP RegistryMedium-severity findings · 1 findingOpen the reportB #3 in Developer Tools

Light WordPress profiler.

★ 564stars
7.5krelease downloads
≈600active sites
280kcomposer installs
3.3.7latest · 4 years ago

Install

Download laps.zip From the 3.3.7 release on GitHub, Jun 16, 2022

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

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/rarst/laps/releases/download/3.3.7/laps.zip

On Packagist as rarst/laps:

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

Laps v3 toolbar screenshot

Laps — light WordPress profiler

Make a site, make it fast.

Laps is a plugin that shows performance information about WordPress page load.

It provides a visual summary in toolbar that is quick and easy to inspect.

Page profiling

Laps automatically tracks many events, such as:

API profiling

For Ajax and REST API — Laps outputs performance information by Server Timing API, for use with clients such as Chrome Dev Tools.

Laps v3 dev tools screenshot

API authentication

API requests need to be authenticated as admin for performance data to be sent. For Ajax requests cookies are sufficient. REST API requests also need nonce passed.

laps_can_see check can be filtered to relax required permissions on the plugin’s side.

Installation

Composer (recommended) Release archive
composer require rarst/laps Download Laps

Tests

Tests require Brain Monkey (included in dependencies) and PHPUnit 8 (not included).

phpunit

License

MIT

Releases

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

Tag
Published
Assets
Downloads
3.3.7 latest
Jun 16, 2022 4 years ago
laps.zip
2,835
Feb 8, 2022 4 years ago
laps.zip
294
Sep 28, 2021 5 years ago
laps.zip
292
Nov 16, 2020 5 years ago
laps.zip
718
Mar 11, 2020 6 years ago
laps.zip
610
Jul 2, 2019 7 years ago
laps.zip +1 asset
596
laps.zip157
laps-3.3.1.zip439
3.3
Mar 27, 2019 7 years ago
laps-3.3.zip
278
3.2
Jan 30, 2019 7 years ago
laps-3.2.zip
138
3.1
Jan 22, 2019 7 years ago
laps-3.1.zip
45
Jan 9, 2019 7 years ago
laps-3.0.1.zip
71
3.0
Dec 28, 2018 7 years ago
laps-3.0.zip
57
2.0
Feb 26, 2018 8 years ago
laps-2.0.zip
1,036
Jul 5, 2017 9 years ago
laps-1.4.4.zip
97
Jun 28, 2017 9 years ago
laps-1.4.3.zip
24
Dec 2, 2016 9 years ago
laps-1.4.2.zip
93
Dec 1, 2016 9 years ago
laps-1.4.1.zip
20
1.4
Oct 1, 2016 10 years ago
laps-1.4.zip
41
Aug 27, 2015 11 years ago
laps-1.3.2.zip
164
Aug 11, 2015 11 years ago
laps-1.3.1.zip
16
1.3
Jun 12, 2015 11 years ago
laps-1.3.zip
26
Feb 6, 2015 11 years ago
laps-1.2.1.zip
45

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

B grade

Security

Laps 3.3.7 · audited by WP Registry

Medium-severity findings.

1 medium
Audited release
3.3.7
Findings
1
Worst severity
medium
Content hash
dece73b6b85954ec58d6fd69…

Findings

  • medium Reflected XSS in admin-bar profiler tooltips via unsanitized SQL and HTTP URLs

    xss_reflected

    Laps builds timeline event descriptions from unsanitized data and then renders them as HTML in Bootstrap tooltips. With SAVEQUERIES enabled, Sql_Collector concatenates the raw SQL string (which includes request-controlled values such as the public search parameter s) with HTML markers. Http_Collector uses the outbound request URL as the event name; Stopwatch_Record interpolates that name next to <hr> markup. Toolbar_Manager feeds those descriptions through the Mustache template into title="{{description}}". The bundled tooltip (public/js/source.js, copied into laps.js) is initialized with html:true and no sanitizer; Tooltip.setContent() assigns the decoded title via jQuery.html(). An unauthenticated attacker who tricks a manage_options user into opening a URL whose queries or HTTP calls contain HTML (for example /?s=<img src=x onerror=…> while SAVEQUERIES is on) can execute JavaScript in that administrator's session when they hover a Laps timeline bar. The output is not shown to roles below manage_options on a default install (laps_can_see). Mitigations: SAVEQUERIES is required for the SQL path; the HTTP path does not need it but does need the admin's request to call an attacker-influenced URL.

    public/js/source.js:4-10

    Recommendation

    Keep intentional markup (<br>, <hr>) separate from untrusted text. HTML-escape SQL, HTTP URLs, and backtrace strings (esc_html / htmlspecialchars) before concatenation. Prefer tooltip html:false, or sanitize with a whitelist that allows only br/hr. Do not pass raw query text or URLs into jQuery.html().

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.