WP Manifestindependent plugin directory
manifest / ecommerce / dpo_wordpress_standalone

DPO Group for Wordpress Standalone WP Registry grade D+. High-severity findings · 2 findingsWP RegistryHigh-severity findings · 2 findingsOpen the reportD+

This is the DPO Group plugin for Wordpress Standalone.

★ 0stars
172release downloads
≈70active sites
v1.1.0latest · 2 years ago

Install

Download dpo-standalone-wp-plugin.zip From the v1.1.0 release on GitHub, Oct 15, 2024

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

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/dpo-group/dpo_wordpress_standalone/releases/download/v1.1.0/dpo-standalone-wp-plugin.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

DPO Group Standalone plugin v1.1.0 for WordPress v6.6.2

This is the DPO Group plugin for WordPress Standalone. Please feel free to contact the DPO Group support team should you require any assistance.

Installation

  1. Download the Plugin
  1. Install the Plugin
  • Navigate to the login page of your WordPress site (typically located at http://yourdomain.com/wp-admin). Enter your username and password to log in.
  • On your WordPress dashboard, navigate to the Plugins section.
  • Click on the Add New button, then click on the Upload Plugin button.
  • Choose the ZIP file you downloaded earlier and click Install Now.
  • After the installation has completed, click the Activate button to activate the plugin.
  1. Page Setup
  • Create three pages, one each for checkout, payment success and payment failure. For example, name them:

    • DPO Standalone
    • DPO Standalone Success
    • DPO Standalone Failure
  • Note the URL slug for each, which will be used in configuring return URLs.

  • Add the shortcode [dpo_standalone_payment_checkout] to the checkout page, which will display the checkout form.

  • Add the shortcode [dpo_standalone_payment_success] to the success page.

  • Add the shortcode [dpo_standalone_payment_failure] to the failure page.

  1. How to create a page?
  • In the WordPress dashboard, locate and click on the Pages section in the left-hand menu.
  • Click the Add New button at the top of the Pages section to create a new page.
  • In the new page editor, enter a title for your page in the provided field. Add any content you wish to appear on the page in the main editor area.
  • Switch to the Text editor mode by clicking the Text tab above the editor. Enter your shortcode in the desired location within the content.
  • Once you have added your content and shortcode, click the Publish button to make the page live on your website.
  • After publishing, click the View Page link to see how your page looks on the front end of your website.
  1. Configure the Plugin
  • Configuration is by means of the DPO Standalone Plugin menu item on the Admin Menu Bar in the left-hand menu. The options are:
    • Company Token - this is account number given to you by DPO e.g 9F416C11-1234-5678-9112-D5710E4C5E0A.
    • Service Type - this is the service type given by DPO e.g 3854.
    • Success URL - the URL slug of the success page.
    • Failure URL - the URL slug of the failure page.
    • Test Mode - check this to use the sandbox (test) account, where no real transactions are processed.
    • Logo Options - check to enable which logos will be displayed on the checkout page.
  1. Payments
  • After payment, DPO Pay will redirect to your DPO Standalone Success or Failure Page, providing a payment reference and the amount paid or a reason for the failure.

Collaboration

Please submit pull requests with any tweaks, features or fixes you would like to share.

Releases

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

Tag
Published
Assets
Downloads
v1.1.0 latest
Oct 15, 2024 2 years ago
dpo-standalone-wp-plugin.zip
29
Apr 13, 2022 4 years ago
Wordpress_Standalone_5.8_DPO_Plugin_1.0.1.zip
86
Jul 30, 2021 5 years ago
Wordpress_Standalone_5.8_DPO_Plugin_1.0.0.zip
57

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

D+ grade

Security

DPO Group for Wordpress Standalone 1.1.0 · audited by WP Registry

High-severity findings.

1 high 1 medium
Audited release
1.1.0
Findings
2
Worst severity
high
Content hash
bce5caa9bad42520d94bf55d…

Findings

  • high Unauthenticated payment-return IDOR: verified DPO token is not bound to post_id, so any paid transaction marks any order paid

    auth_bypass

    dpo_standalone_wp_payment_success is hooked to both admin_post_ and admin_post_nopriv_ (no capability, no nonce). It reads post_id, TransactionToken, and CompanyRef from $_REQUEST, calls Dpo::verifyToken with the site's Company Token plus the request TransactionToken, and if Result=='000' and the request CompanyRef equals the DPO response CompanyRef it update_post_meta's that post_id to dposa_order_status=paid (plus currency/amount/approval from DPO). It never loads the target post, never checks post_type==dpo_standalone_order, and never compares the request token/ref/amount to the values stored at token-create time (dposa_transaction_token, dposa_order_reference, dposa_order_data['paymentAmount']). CompanyRef is not a secret (DPO echoes it on the return URL and the success shortcode prints it). Observable attack: (1) pass reCAPTCHA and start a large-amount order A (wp_insert_post, token created, pay page not completed); (2) complete a small real payment B; (3) GET /wp-admin/admin-post.php?action=dpo_standalone_wp_payment_success&post_id={A}&TransactionToken={B's token}&CompanyRef={B's ref}. Order A's ledger is paid while DPO only collected B's amount. The same paid token can be replayed against every other post_id. This is not a full no-pay bypass (DPO must have returned 000 once) but it is unauthenticated payment-record tampering on the only WordPress state the plugin uses as a paid flag.

    dpo-standalone-wp-plugin.php:36-37,148-175

    Recommendation

    Load the order by post_id, require post_type dpo_standalone_order, and accept the callback only when request TransactionToken and CompanyRef (and verified amount/currency) match the stored dposa_transaction_token / dposa_order_reference / dposa_order_data. Reject already-paid orders (single-use token). Do not update arbitrary post IDs.

  • medium Unauthenticated failure callback overwrites any post's dposa_order_status to failed

    missing_auth

    dpo_standalone_wp_payment_failure is also nopriv and takes post_id from $_REQUEST. After verifyToken, any parseable DPO XML (including an error body for a missing/invalid TransactionToken) causes update_post_meta($post_id, 'dposa_order_status', 'failed') with no check that the token belongs to that post, that the post is a dpo_standalone_order, or that the order is not already paid. The success handler's else branch does the same write when Result is not 000. Observable consequence: GET /wp-admin/admin-post.php?action=dpo_standalone_wp_payment_failure&post_id={n} (no auth, no valid token required as long as DPO returns XML) flips the payment ledger for that id to failed, including previously paid records. Same meta key as finding 1; blast is integrity/DoS of payment records rather than marking unpaid invoices paid.

    dpo-standalone-wp-plugin.php:38-39,176-182,199-216

    Recommendation

    Apply the same order-token binding and post_type check as the success handler. Do not mark an order failed unless the stored transaction token matches and the current status is still pending. Ignore unknown post_id values.

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.