WP Manifestindependent plugin directory
manifest / media / image-crop-positioner

Image Crop Positioner WP Registry grade B. Medium-severity findings · 1 findingWP RegistryMedium-severity findings · 1 findingOpen the reportB

Face recognition and hotspot selection for cropping images in WordPress.

★ 8stars
80release downloads
51kcomposer installs
v1.0.3latest · 10mo ago

Install

Download image-crop-positioner-v1.0.3.zip From the v1.0.3 release on GitHub, Dec 2, 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/mentosmenno2/image-crop-positioner/releases/download/v1.0.3/image-crop-positioner-v1.0.3.zip

On Packagist as mentosmenno2/image-crop-positioner:

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

Image Crop Positioner WordPress plugin

This plugin allows you to better crop your images, based on face detection or hotspot selection.

Menu

Do you like this plugin?

That's amazing to hear 😄! I attempt to keep it up to date as best as I can. However, it's a spare-time project that I mostly work on in the evening hours. Would you like to support me, feel free to give a small donation so I can buy some snacks to eat while I'm typing new code.

Donate with PayPal or Creditcard

Example images

Faces detection

Example of faces detection

Hotspots selection

Example of hotspots selection

Releases

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

Tag
Published
Assets
Downloads
v1.0.3 latest
Dec 2, 2025 10mo ago
image-crop-positioner-v1.0.3.zip
4
Dec 2, 2025 10mo ago
image-crop-positioner-v1.0.2.zip
2
Oct 2, 2025 1 year ago
image-crop-positioner-v1.0.1.zip
1
Apr 18, 2025 1 year ago
image-crop-positioner-v1.0.0.zip
1
Dec 10, 2024 1 year ago
image-crop-positioner-v0.6.3.zip
0
Jun 7, 2024 2 years ago
image-crop-positioner-v0.6.2.zip
4
May 10, 2024 2 years ago
image-crop-positioner-v0.6.1.zip
3
Jun 10, 2023 3 years ago
image-crop-positioner-v0.6.0.zip
4
Nov 6, 2022 3 years ago
image-crop-positioner-v0.5.0.zip
5
Oct 29, 2022 3 years ago
image-crop-positioner-v0.4.0.zip
5
Oct 7, 2022 4 years ago
image-crop-positioner-v0.3.1.zip
5
Jun 28, 2022 4 years ago
image-crop-positioner-v0.3.0.zip
5
Apr 6, 2022 4 years ago
image-crop-positioner-v0.2.3.zip
5
Mar 22, 2022 4 years ago
image-crop-positioner-v0.2.2.zip
5
Mar 7, 2022 4 years ago
image-crop-positioner-v0.2.1.zip
5
Mar 3, 2022 4 years ago
image-crop-positioner-v0.2.0.zip
5
Jan 11, 2022 4 years ago
image-crop-positioner-v0.1.4.zip
5
Jan 7, 2022 4 years ago
image-crop-positioner-v0.1.3.zip
5
Nov 18, 2021 4 years ago
image-crop-positioner-v0.1.2.zip
5
Oct 26, 2021 4 years ago
image-crop-positioner-v0.1.1.zip
3
Oct 25, 2021 4 years ago
image-crop-positioner-v0.1.0.zip
3
B grade

Security

Image Crop Positioner 1.0.3 · audited by WP Registry

Medium-severity findings.

1 medium
Audited release
1.0.3
Findings
1
Worst severity
medium
Content hash
99d37fdcdc6490f79dc4ccd4…

Findings

  • medium Subscriber can rewrite any image crop and regenerate the media library via nonce-only AJAX

    missing_capability

    All plugin AJAX actions are registered as wp_ajax_* only (logged-in) and share BaseAjaxCall::validate_nonce(), which calls check_ajax_referer('image-crop-positioner') and then returns. No handler calls current_user_can('edit_post', $attachment_id) or manage_options. Assets::enqueue_admin runs on admin_enqueue_scripts with no screen or capability guard, so wp_create_nonce('image-crop-positioner') is printed as image_crop_positioner_options.nonce on every admin page, including the dashboard and profile.php that a Subscriber can load. After scraping that nonce the same user can POST admin-ajax.php: (1) action=image_crop_positioner_save_faces / save_hotspots / remove_faces with any image attachment_id — AttachmentMeta writes image_crop_positioner_faces or _hotspots and Regenerate::execute immediately runs wp_generate_attachment_metadata, which Crop::crop uses to overwrite every intermediate size; those files are what the front end displays. (2) action=image_crop_positioner_migrate with migrator=regenerate_images (or the My Eyes Are Up Here importers) and an attacker-chosen per_page, paging through every image in the library. Face detection, image-preview HTML, and encode_image (original bytes as data: base64, with a wp_remote_get fallback to wp_get_attachment_image_src) are likewise ungated beyond the nonce. Nonce is not authorization: it is uid-scoped and this plugin hands every logged-in role a valid one.

    app/Ajax/BaseAjaxCall.php:12-21

    Recommendation

    Add current_user_can('edit_post', $attachment_id) (fail closed) in BaseAjaxCall before any attachment-scoped work. Require current_user_can('manage_options') on image_crop_positioner_migrate. Restrict admin_enqueue_scripts to the attachment/media and plugin settings screens so Subscriber profile.php does not receive a usable nonce. Cap migrator per_page and do not treat a passing nonce as a capability 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.