WP Manifestindependent plugin directory
manifest / content / frontend-post-order

Frontend Post Order WP Registry grade B. Medium-severity findings · 1 findingWP RegistryMedium-severity findings · 1 findingOpen the reportB

A plugin to let you re-order posts on the frontend.

★ 8stars
7release downloads
1.0.2latest · 1 year ago

Install

Download frontend-post-order.zip From the 1.0.2 release on GitHub, Feb 6, 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/robertdevore/frontend-post-order/releases/download/1.0.2/frontend-post-order.zip
Updates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.

A plugin to reorder posts via drag and drop on the frontend.

Usage

Add the [frontend_post_order] shortcode where you'd like the list to be displayed.

By default only posts will be displayed. You can pass a type argument to the shortcode with a singular or comma separated list of post types which will output each of them on the frontend in their own lists.

Example:

[frontend_post_order type="post, page, product"]

Releases

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

Tag
Published
Assets
Downloads
1.0.2 latest
Feb 6, 2025 1 year ago
frontend-post-order.zip
7
Oct 28, 2024 1 year ago
tag only
—
B grade

Security

Frontend Post Order 1.0.2 · audited by WP Registry

Medium-severity findings.

1 medium
Audited release
1.0.2
Findings
1
Worst severity
medium
Content hash
a9512f809164cc05b7de7a2f…

Findings

  • medium Subscriber+ missing authorization on save_post_order allows arbitrary menu_order updates

    missing_capability

    fpo_save_post_order is registered only as wp_ajax_save_post_order (logged-in). It verifies nonce fpo_save_order_nonce then, with no current_user_can('edit_post') / edit_others_posts / manage_options check, walks a comma-separated $_POST['order'] list, integer-casts each id after stripping the 'post-' prefix, and calls wp_update_post() to set menu_order. wp_update_post does not enforce capabilities. fpo_enqueue_scripts runs on wp_enqueue_scripts for every frontend request (not gated on the shortcode or a role), so any Subscriber visiting any public page receives a usable nonce in fpo_ajax_object. The attacker does not need the shortcode UI: post IDs are enumerable via the REST API or HTML, and IDs of posts the user cannot edit (including other authors' posts, pages, products, and non-public types if the id is known) are accepted. Observable: those rows' menu_order change and any menu_order-sorted query (this plugin's shortcode, admin lists, page nav, Woo product order) reflects the new sequence. Unauthenticated users cannot hit the action. CSRF against another user is nonce-blocked; this is broken access control for the caller's own session.

    frontend-post-order.php:74-92,156-174

    Recommendation

    Before updating each post, load it and require current_user_can('edit_post', $post_id) (or a site-owner-configured capability such as edit_others_posts). Reject unknown/non-published IDs as appropriate. Restrict the AJAX payload to post types the request is allowed to sort. Enqueue the script and nonce only on singulars that contain [frontend_post_order], not on every frontend page. Keep the existing nonce check.

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.