Multi Currency Switcher for WooCommerce Security & Risk Analysis

wordpress.org/plugins/psmwoo-multi-currency

Stop losing sales. Our multi currency switcher & converter shows local prices in WooCommerce to reduce cart abandonment and boost your global sales.

100 active installs v1.0.3 PHP 7.4+ WP 5.8+ Updated Jan 28, 2026
currencycurrency-convertercurrency-switchermulti-currencywoocommerce
100
A · Safe
CVEs total0
Unpatched0
Last CVENever
Safety Verdict

Is Multi Currency Switcher for WooCommerce Safe to Use in 2026?

Generally Safe

Score 100/100

Multi Currency Switcher for WooCommerce has no known CVEs and is actively maintained. It's a solid choice for most WordPress installations.

No known CVEs Updated 2mo ago
Risk Assessment

The "psmwoo-multi-currency" plugin v1.0.3 exhibits a generally strong security posture, characterized by the absence of dangerous functions, SQL injection vulnerabilities due to 100% prepared statement usage, and a high percentage of properly escaped output. The plugin also demonstrates good practice by utilizing nonces and capability checks for many of its entry points. The complete lack of recorded vulnerabilities, including critical and high severity issues, further suggests a commitment to security by the developers.

However, concerns arise from the significant attack surface exposed without proper authentication or permission checks. Out of 36 total entry points, 13 are unprotected, including a substantial number of REST API routes. While taint analysis showed no immediate critical or high-severity unsanitized flows, a large number of unprotected entry points, particularly in the REST API, could be leveraged by an attacker to discover or exploit potential logic flaws that might not be caught by static analysis alone. The presence of external HTTP requests, while not inherently problematic, warrants careful review to ensure they don't introduce other vulnerabilities.

In conclusion, while the plugin's code quality regarding direct security pitfalls like SQL injection and output sanitization is commendable, the unprotected attack surface presents a notable risk. Future development should prioritize securing all exposed entry points with appropriate authentication and authorization checks. The absence of historical vulnerabilities is positive, but the current findings highlight areas requiring immediate attention.

Key Concerns

  • Unprotected REST API routes
  • Unprotected AJAX handlers
  • External HTTP requests present
Vulnerabilities
None known

Multi Currency Switcher for WooCommerce Security Vulnerabilities

No known vulnerabilities — this is a good sign.
Code Analysis
Analyzed Mar 16, 2026

Multi Currency Switcher for WooCommerce Code Analysis

Dangerous Functions
0
Raw SQL Queries
0
13 prepared
Unescaped Output
3
93 escaped
Nonce Checks
4
Capability Checks
31
File Operations
0
External Requests
4
Bundled Libraries
0

SQL Query Safety

100% prepared13 total queries

Output Escaping

97% escaped96 total outputs
Attack Surface
13 unprotected

Multi Currency Switcher for WooCommerce Attack Surface

Entry Points36
Unprotected13

AJAX Handlers 8

authwp_ajax_psmmc_get_current_currencyincludes\ajax.php:18
noprivwp_ajax_psmmc_get_current_currencyincludes\ajax.php:19
authwp_ajax_psmwoo_get_prices_for_cacheincludes\compatibility\cache.php:20
noprivwp_ajax_psmwoo_get_prices_for_cacheincludes\compatibility\cache.php:21
authwp_ajax_psmmc_force_by_address_countryincludes\frontend\checkout.php:33
noprivwp_ajax_psmmc_force_by_address_countryincludes\frontend\checkout.php:34
authwp_ajax_psmmc_get_checkout_dataincludes\frontend\checkout.php:35
noprivwp_ajax_psmmc_get_checkout_dataincludes\frontend\checkout.php:36

REST API Routes 27

GET/wp-json/psmfr/v1/licenseframework\includes\rest-api\class-psmfr-rest-licenses.php:60
POST/wp-json/psmfr/v1license/activateframework\includes\rest-api\class-psmfr-rest-licenses.php:85
POST/wp-json/psmfr/v1/license/deactivateframework\includes\rest-api\class-psmfr-rest-licenses.php:121
POST/wp-json/psmfr/v1license/refreshframework\includes\rest-api\class-psmfr-rest-licenses.php:157
GET/wp-json/psmfr/v1/pagesframework\includes\rest-api\class-psmfr-rest-pages.php:23
GET/wp-json/psmfr/v1/settingsframework\includes\rest-api\class-psmfr-rest-settings.php:23
POST/wp-json/psmfr/v1/settings/resetframework\includes\rest-api\class-psmfr-rest-settings.php:76
GET/wp-json/psmfr/v1/timezonesframework\includes\rest-api\class-psmfr-rest-timezones.php:24
GET/wp-json/psmfr/v1/user-rolesframework\includes\rest-api\class-psmfr-rest-user-roles.php:27
GET/wp-json/psmfr/v1/woo-countriesframework\includes\rest-api\class-psmfr-rest-woo-countries.php:24
GET/wp-json/psmfr/v1/woo-statesframework\includes\rest-api\class-psmfr-rest-woo-countries.php:35
GET/wp-json/psmmc/v1/settings/currenciesincludes\rest-api\settings.php:33
GET/wp-json/psmmc/v1/settings/currencies/(?P<code>[a-zA-Z]+)includes\rest-api\settings.php:69
POST/wp-json/psmmc/v1/settings/currencies/refresh-exchange-ratesincludes\rest-api\settings.php:213
POST/wp-json/psmmc/v1/settings/currencies/reorderincludes\rest-api\settings.php:225
GET/wp-json/psmmc/v1/settings/currencies/woocommerceincludes\rest-api\settings.php:254
GET/wp-json/psmmc/v1/settings/checkout-currenciesincludes\rest-api\settings.php:266
GET/wp-json/psmmc/v1/settings/payment-methodsincludes\rest-api\settings.php:310
GET/wp-json/psmmc/v1/settings/checkout-optionsincludes\rest-api\settings.php:322
POST/wp-json/psmmc/v1/settings/checkout-options/resetincludes\rest-api\settings.php:361
GET/wp-json/psmmc/v1/settings/display-optionsincludes\rest-api\settings.php:373
POST/wp-json/psmmc/v1/settings/display-options/resetincludes\rest-api\settings.php:438
GET/wp-json/psmmc/v1/settings/auto-select-country-currenciesincludes\rest-api\settings.php:450
GET/wp-json/psmmc/v1/settings/advancedincludes\rest-api\settings.php:500
POST/wp-json/psmmc/v1/settings/advanced/resetincludes\rest-api\settings.php:535
GET/wp-json/psmmc/v1/settings/countriesincludes\rest-api\settings.php:547
POST/wp-json/psmmc/v1/switcher/switch-currencyincludes\rest-api\switcher.php:30

Shortcodes 1

[psm-multi-currency-switcher] includes\frontend\shortcode.php:23
WordPress Hooks 145
actionadmin_menuframework\includes\class-psmfr-admin.php:19
actionadmin_enqueue_scriptsframework\includes\class-psmfr-admin.php:22
actionadmin_enqueue_scriptsframework\includes\class-psmfr-admin.php:25
filteradmin_body_classframework\includes\class-psmfr-admin.php:99
actionwp_enqueue_scriptsframework\includes\class-psmfr-frontend.php:19
actionwp_enqueue_scriptsframework\includes\class-psmfr-frontend.php:22
actioninitframework\includes\class-psmfr-installation.php:44
actioninitframework\includes\class-psmfr-installation.php:46
actioninitframework\includes\rest-api\class-psmfr-rest-licenses.php:28
actionrest_api_initframework\includes\rest-api\class-psmfr-rest-licenses.php:31
actionrest_api_initframework\includes\rest-api\class-psmfr-rest-pages.php:14
actionrest_api_initframework\includes\rest-api\class-psmfr-rest-settings.php:14
actionrest_api_initframework\includes\rest-api\class-psmfr-rest-timezones.php:14
actionrest_api_initframework\includes\rest-api\class-psmfr-rest-user-roles.php:14
actionrest_api_initframework\includes\rest-api\class-psmfr-rest-woo-countries.php:14
actioninitincludes\admin-pages\analytics.php:19
actioninitincludes\admin-pages\analytics.php:20
filterwoocommerce_leaderboardsincludes\admin-pages\analytics.php:65
filterwoocommerce_analytics_orders_query_argsincludes\admin-pages\analytics.php:68
filterwoocommerce_analytics_orders_stats_query_argsincludes\admin-pages\analytics.php:69
filterwoocommerce_analytics_orders_select_queryincludes\admin-pages\analytics.php:70
filterwoocommerce_analytics_orders_stats_select_queryincludes\admin-pages\analytics.php:71
filterwoocommerce_analytics_products_query_argsincludes\admin-pages\analytics.php:74
filterwoocommerce_analytics_products_stats_query_argsincludes\admin-pages\analytics.php:75
filterwoocommerce_analytics_products_select_queryincludes\admin-pages\analytics.php:76
filterwoocommerce_analytics_products_stats_select_queryincludes\admin-pages\analytics.php:77
filterwoocommerce_analytics_revenue_query_argsincludes\admin-pages\analytics.php:80
filterwoocommerce_analytics_revenue_select_queryincludes\admin-pages\analytics.php:81
filterwoocommerce_analytics_categories_query_argsincludes\admin-pages\analytics.php:84
filterwoocommerce_analytics_clauses_select_categories_subqueryincludes\admin-pages\analytics.php:85
filterwoocommerce_analytics_categories_select_queryincludes\admin-pages\analytics.php:86
filterwoocommerce_analytics_coupons_query_argsincludes\admin-pages\analytics.php:89
filterwoocommerce_analytics_coupons_stats_query_argsincludes\admin-pages\analytics.php:90
filterwoocommerce_analytics_coupons_stats_select_queryincludes\admin-pages\analytics.php:91
filterwoocommerce_analytics_coupons_select_queryincludes\admin-pages\analytics.php:92
filterwoocommerce_analytics_taxes_query_argsincludes\admin-pages\analytics.php:95
filterwoocommerce_analytics_taxes_stats_query_argsincludes\admin-pages\analytics.php:96
filterwoocommerce_analytics_taxes_stats_select_queryincludes\admin-pages\analytics.php:97
filterwoocommerce_analytics_taxes_select_queryincludes\admin-pages\analytics.php:98
filterwoocommerce_analytics_clauses_join_orders_subqueryincludes\admin-pages\analytics.php:101
filterwoocommerce_analytics_clauses_join_orders_stats_totalincludes\admin-pages\analytics.php:102
filterwoocommerce_analytics_clauses_join_orders_stats_intervalincludes\admin-pages\analytics.php:103
filterwoocommerce_analytics_clauses_join_products_subqueryincludes\admin-pages\analytics.php:105
filterwoocommerce_analytics_clauses_join_products_stats_totalincludes\admin-pages\analytics.php:106
filterwoocommerce_analytics_clauses_join_products_stats_intervalincludes\admin-pages\analytics.php:107
filterwoocommerce_analytics_clauses_join_coupons_subqueryincludes\admin-pages\analytics.php:109
filterwoocommerce_analytics_clauses_join_coupons_stats_totalincludes\admin-pages\analytics.php:110
filterwoocommerce_analytics_clauses_join_coupons_stats_intervalincludes\admin-pages\analytics.php:111
filterwoocommerce_analytics_clauses_join_taxes_subqueryincludes\admin-pages\analytics.php:113
filterwoocommerce_analytics_clauses_join_taxes_stats_totalincludes\admin-pages\analytics.php:114
filterwoocommerce_analytics_clauses_join_taxes_stats_intervalincludes\admin-pages\analytics.php:115
filterwoocommerce_analytics_clauses_join_categories_subqueryincludes\admin-pages\analytics.php:117
filterwoocommerce_analytics_clauses_where_orders_subqueryincludes\admin-pages\analytics.php:120
filterwoocommerce_analytics_clauses_where_orders_stats_totalincludes\admin-pages\analytics.php:121
filterwoocommerce_analytics_clauses_where_orders_stats_intervalincludes\admin-pages\analytics.php:122
filterwoocommerce_analytics_clauses_where_products_subqueryincludes\admin-pages\analytics.php:124
filterwoocommerce_analytics_clauses_where_products_stats_totalincludes\admin-pages\analytics.php:125
filterwoocommerce_analytics_clauses_where_products_stats_intervalincludes\admin-pages\analytics.php:126
filterwoocommerce_analytics_clauses_where_coupons_subqueryincludes\admin-pages\analytics.php:128
filterwoocommerce_analytics_clauses_where_coupons_stats_totalincludes\admin-pages\analytics.php:129
filterwoocommerce_analytics_clauses_where_coupons_stats_intervalincludes\admin-pages\analytics.php:130
filterwoocommerce_analytics_clauses_where_taxes_subqueryincludes\admin-pages\analytics.php:132
filterwoocommerce_analytics_clauses_where_taxes_stats_totalincludes\admin-pages\analytics.php:133
filterwoocommerce_analytics_clauses_where_taxes_stats_intervalincludes\admin-pages\analytics.php:134
filterwoocommerce_analytics_clauses_where_categories_subqueryincludes\admin-pages\analytics.php:136
filterwoocommerce_analytics_clauses_select_orders_subqueryincludes\admin-pages\analytics.php:139
filterwoocommerce_analytics_clauses_select_orders_stats_totalincludes\admin-pages\analytics.php:140
filterwoocommerce_analytics_clauses_select_orders_stats_intervalincludes\admin-pages\analytics.php:141
filterwoocommerce_analytics_clauses_select_products_subqueryincludes\admin-pages\analytics.php:143
filterwoocommerce_analytics_clauses_select_products_stats_totalincludes\admin-pages\analytics.php:144
filterwoocommerce_analytics_clauses_select_products_stats_intervalincludes\admin-pages\analytics.php:145
filterwoocommerce_analytics_clauses_select_coupons_subqueryincludes\admin-pages\analytics.php:147
filterwoocommerce_analytics_clauses_select_coupons_stats_totalincludes\admin-pages\analytics.php:148
filterwoocommerce_analytics_clauses_select_coupons_stats_intervalincludes\admin-pages\analytics.php:149
filterwoocommerce_analytics_clauses_select_taxes_subqueryincludes\admin-pages\analytics.php:151
filterwoocommerce_analytics_clauses_select_taxes_stats_totalincludes\admin-pages\analytics.php:152
filterwoocommerce_analytics_clauses_select_taxes_stats_intervalincludes\admin-pages\analytics.php:153
actionadd_meta_boxesincludes\admin-pages\order-info-widget.php:14
filterpsmplugins_admin_submenusincludes\admin-pages\settings.php:22
actionadmin_enqueue_scriptsincludes\admin-pages\settings.php:25
actionupdate_option_woocommerce_currencyincludes\admin-pages\settings.php:28
filteradmin_body_classincludes\admin-pages\settings.php:64
actioninitincludes\blocks.php:16
actionelementor/widgets/registerincludes\blocks.php:19
filterwoocommerce_get_price_htmlincludes\compatibility\cache.php:18
actionadmin_initincludes\compatibility\polylang.php:20
filterpsmwoo_mc_is_checkoutincludes\compatibility\polylang.php:21
filterwoocommerce_get_price_htmlincludes\compatibility\role-based-pricing-for-wc.php:18
filterwc_nyp_raw_suggested_priceincludes\compatibility\woo-name-your-price.php:20
filterwc_nyp_raw_minimum_priceincludes\compatibility\woo-name-your-price.php:21
filterwc_nyp_raw_maximum_priceincludes\compatibility\woo-name-your-price.php:22
filterpsmwmc_need_original_product_priceincludes\compatibility\woo-name-your-price.php:24
filterwoocommerce_product_addons_option_price_rawincludes\compatibility\woo-product-addons.php:20
filterwoocommerce_product_addons_price_rawincludes\compatibility\woo-product-addons.php:21
filterwoocommerce_subscriptions_product_price_stringincludes\compatibility\woo-product-bundles.php:20
filterwoocommerce_subscriptions_product_sign_up_feeincludes\compatibility\woo-subscriptions.php:22
filterwoocommerce_subscriptions_product_priceincludes\compatibility\woo-subscriptions.php:23
filterwoocommerce_subscriptions_product_sale_priceincludes\compatibility\woo-subscriptions.php:24
filterpsmwmc_modify_cart_contentsincludes\compatibility\woo-subscriptions.php:27
filterpsmwmc_get_default_product_priceincludes\compatibility\woo-subscriptions.php:28
filterpsmwmc_get_default_coupon_discount_amountincludes\compatibility\woo-subscriptions.php:31
filterwoocommerce_table_rate_package_row_base_priceincludes\compatibility\woo-table-rate-shipping.php:14
filterpsmwmc_need_original_product_priceincludes\compatibility\wpc-product-bundles-for-wc.php:19
actionadmin_initincludes\compatibility\wpml.php:20
filterpsmwoo_mc_is_checkoutincludes\compatibility\wpml.php:21
filterwoocommerce_email_classesincludes\emails\exchange-rate-notification\actions.php:15
actioninitincludes\frontend\checkout.php:28
actioninitincludes\frontend\checkout.php:29
filterwoocommerce_available_payment_gatewaysincludes\frontend\checkout.php:30
actionwoocommerce_checkout_update_order_reviewincludes\frontend\checkout.php:39
filterwoocommerce_get_cart_contentsincludes\frontend\hooks.php:16
actionwoocommerce_checkout_create_order_line_itemincludes\frontend\hooks.php:19
actionwoocommerce_new_orderincludes\frontend\hooks.php:22
actionpsmfr_js_objectincludes\frontend\hooks.php:25
actionwp_enqueue_scriptsincludes\frontend\register-scritps.php:14
actionwoocommerce_single_product_summaryincludes\frontend\shortcode.php:18
actionwoocommerce_before_add_to_cart_formincludes\frontend\shortcode.php:20
actioninitincludes\frontend\shortcode.php:80
actioninitincludes\frontend\switcher.php:28
actioninitincludes\frontend\switcher.php:29
actioninitincludes\frontend\switcher.php:30
filterwoocommerce_currencyincludes\frontend\switcher.php:44
filterpre_option_woocommerce_currency_posincludes\frontend\switcher.php:45
filterwc_get_price_thousand_separatorincludes\frontend\switcher.php:46
actionwc_get_price_decimal_separatorincludes\frontend\switcher.php:47
filterwc_get_price_decimalsincludes\frontend\switcher.php:48
filterwoocommerce_product_get_priceincludes\frontend\switcher.php:51
filterwoocommerce_product_get_regular_priceincludes\frontend\switcher.php:52
filterwoocommerce_product_get_sale_priceincludes\frontend\switcher.php:53
filterwoocommerce_product_variation_get_priceincludes\frontend\switcher.php:54
filterwoocommerce_product_variation_get_regular_priceincludes\frontend\switcher.php:55
filterwoocommerce_product_variation_get_sale_priceincludes\frontend\switcher.php:56
filterwoocommerce_variation_prices_priceincludes\frontend\switcher.php:57
filterwoocommerce_variation_prices_regular_priceincludes\frontend\switcher.php:58
filterwoocommerce_variation_prices_sale_priceincludes\frontend\switcher.php:59
filterwoocommerce_package_ratesincludes\frontend\switcher.php:62
filterwoocommerce_shipping_free_shipping_instance_optionincludes\frontend\switcher.php:63
filterwoocommerce_shipping_free_shipping_optionincludes\frontend\switcher.php:64
actionwoocommerce_coupon_get_discount_amountincludes\frontend\switcher.php:67
actioninitincludes\installation.php:47
actioninitincludes\installation.php:49
actionrest_api_initincludes\rest-api\settings.php:20
actionrest_api_initincludes\rest-api\switcher.php:20
actionplugins_loadedpsmwoo-multi-currency.php:43
filterplugin_row_metapsmwoo-multi-currency.php:45
Maintenance & Trust

Multi Currency Switcher for WooCommerce Maintenance & Trust

Maintenance Signals

WordPress version tested6.9.4
Last updatedJan 28, 2026
PHP min version7.4
Downloads1K

Community Trust

Rating100/100
Number of ratings1
Active installs100
Developer Profile

Multi Currency Switcher for WooCommerce Developer Profile

PSM Plugins

3 plugins · 10K total installs

73
trust score
Avg Security Score
92/100
Avg Patch Time
413 days
View full developer profile
Detection Fingerprints

How We Detect Multi Currency Switcher for WooCommerce

Patterns used to identify this plugin on WordPress sites during automated security audits and web crawling.

Asset Fingerprints

Asset Paths
/wp-content/plugins/psmwoo-multi-currency/framework/assets/css/psmfr-admin.css/wp-content/plugins/psmwoo-multi-currency/assets/css/psmwoo-multi-currency-admin.css/wp-content/plugins/psmwoo-multi-currency/assets/js/psmwoo-multi-currency-admin.js/wp-content/plugins/psmwoo-multi-currency/assets/js/psmwoo-multi-currency-public.js
Version Parameters
psmwoo-multi-currency/assets/css/psmwoo-multi-currency-admin.css?ver=psmwoo-multi-currency/assets/js/psmwoo-multi-currency-admin.js?ver=psmwoo-multi-currency/assets/js/psmwoo-multi-currency-public.js?ver=

HTML / DOM Fingerprints

CSS Classes
psmwoo-multi-currency-wrapperpsm-currency-switcher
HTML Comments
PSM Multi-Currency for WooCommerce
Data Attributes
data-currency-switcher-optionsdata-psmwoo-currency
JS Globals
PSMFR_AdminPSMWooMultiCurrency
Shortcode Output
[psm_currency_switcher]
FAQ

Frequently Asked Questions about Multi Currency Switcher for WooCommerce