PrettyLinks – Affiliate Links, Link Branding, Link Tracking, Marketing and Stripe Payments Plugin Security & Risk Analysis

wordpress.org/plugins/pretty-link

🌠 The best WordPress link management, branding, tracking, sharing and payments plugin. Easily make pretty & trackable shortlinks. 🔗

300K active installs v3.6.21 PHP 7.4+ WP 6.0+ Updated Mar 27, 2026
affiliate-linksecommercelink-trackingpaymentsstripe
90
A · Safe
CVEs total8
Unpatched0
Last CVEMay 19, 2025
Safety Verdict

Is PrettyLinks – Affiliate Links, Link Branding, Link Tracking, Marketing and Stripe Payments Plugin Safe to Use in 2026?

Generally Safe

Score 90/100

PrettyLinks – Affiliate Links, Link Branding, Link Tracking, Marketing and Stripe Payments Plugin has a strong security track record. Known vulnerabilities have been patched promptly. It's a solid choice for most WordPress installations.

8 known CVEsLast CVE: May 19, 2025Updated 1mo ago
Risk Assessment

The 'pretty-link' plugin, version 3.6.20, exhibits a mixed security posture. While it demonstrates good practices with a high percentage of prepared SQL statements and properly escaped output, several concerning areas warrant attention. The significant attack surface, with 49 AJAX handlers, 20 of which lack authentication checks, presents a considerable risk. Furthermore, the presence of a `unserialize` function, a known dangerous function, and taint analysis revealing three high-severity unsanitized flows indicate potential for critical vulnerabilities if not handled with extreme care.

The plugin's vulnerability history, with 8 total known CVEs and a recent one in May 2025, highlights a recurring pattern of security weaknesses. The common types of vulnerabilities (Missing Authorization, XSS, CSRF, SQL Injection) directly correlate with the findings in the static analysis, particularly the unprotected AJAX handlers and the potential for unsanitized input. Although there are currently no unpatched CVEs, the history suggests a consistent need for diligent security patching and code review.

In conclusion, while 'pretty-link' shows strengths in its data handling and output sanitization, the large number of unprotected entry points, the presence of dangerous functions, and the historical trend of vulnerabilities necessitate caution. The high-severity taint flows and the significant number of unprotected AJAX handlers are the most immediate concerns that require remediation.

Key Concerns

  • AJAX handlers without auth checks
  • High severity taint flows found
  • Use of dangerous function: unserialize
  • Multiple high severity CVEs in history
  • Recent vulnerability found
Vulnerabilities
8 published

PrettyLinks – Affiliate Links, Link Branding, Link Tracking, Marketing and Stripe Payments Plugin Security Vulnerabilities

CVEs by Year

1 CVE in 2011
2011
1 CVE in 2014
2014
1 CVE in 2015
2015
1 CVE in 2019
2019
1 CVE in 2023
2023
2 CVEs in 2024
2024
1 CVE in 2025
2025
Patched Has unpatched

Severity Breakdown

High
3
Medium
5

8 total CVEs

CVE-2025-48247medium · 4.3Missing Authorization

Shortlinks by Pretty Links <= 3.6.15 - Missing Authorization

May 19, 2025 Patched in 3.6.16 (10d)
CVE-2024-29770medium · 6.1Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Shortlinks by Pretty Links <= 3.6.2 - Reflected Cross-Site Scripting via post_status

Mar 25, 2024 Patched in 3.6.3 (3d)
CVE-2024-2326medium · 4.3Cross-Site Request Forgery (CSRF)

Pretty Links – Affiliate Links, Link Branding, Link Tracking & Marketing Plugin <= 3.6.3 - Cross-Site Request Forgery to Plugin Settings Update

Mar 22, 2024 Patched in 3.6.4 (1d)
CVE-2022-47149medium · 4.3Cross-Site Request Forgery (CSRF)

Shortlinks by Pretty Links <= 3.4.0 - Cross-Site Request Forgery via route

Apr 13, 2023 Patched in 3.4.1 (285d)
CVE-2019-25147high · 7.2Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Pretty Links <= 2.1.9 - Unauthenticated Stored Cross-Site Scripting via track_link

Jun 19, 2019 Patched in 2.1.10 (1679d)
CVE-2015-9457high · 7.2Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')

Pretty Links – Link Management, Branding, Tracking & Sharing Plugin <= 1.6.7 - SQL Injection

Jul 8, 2015 Patched in 1.6.8 (3121d)
CVE-2013-1636high · 7.2Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Pretty Links Lite < 1.6.3 - Stored Cross-Site Scripting

Aug 1, 2014 Patched in 1.6.3 (3462d)
CVE-2011-4595medium · 6.1Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

Pretty Links – Link Management, Branding, Tracking & Sharing Plugin < 1.5.6 - Reflected Cross-Site Scripting

Dec 4, 2011 Patched in 1.5.6 (4433d)
Version History

PrettyLinks – Affiliate Links, Link Branding, Link Tracking, Marketing and Stripe Payments Plugin Release Timeline

v3.6.21Current4 files changed
v3.6.206 files changed
v3.6.194 files changed
v3.6.188 files changed
v3.6.1712 files changed
v3.6.1666 files changed
v3.6.151 CVE17 files changed
v3.6.141 CVE6 files changed
v3.6.121 CVE70 files changed
v3.6.111 CVE4 files changed
v3.6.101 CVE3 files changed
v3.6.91 CVE11 files changed
v3.6.81 CVE21 files changed
v3.6.71 CVE12 files changed
v3.6.61 CVE3 files changed
v3.6.51 CVE3 files changed
v3.6.41 CVE8 files changed
v3.6.32 CVEs16 files changed
v3.6.23 CVEs7 files changed
Code Analysis
Analyzed Mar 16, 2026

PrettyLinks – Affiliate Links, Link Branding, Link Tracking, Marketing and Stripe Payments Plugin Code Analysis

Dangerous Functions
1
Raw SQL Queries
8
148 prepared
Unescaped Output
67
981 escaped
Nonce Checks
44
Capability Checks
29
File Operations
2
External Requests
12
Bundled Libraries
2

Dangerous Functions Found

unserialize$prli_options = unserialize($prli_options);app\models\PrliOptions.php:378

Bundled Libraries

TinyMCESelect2

SQL Query Safety

95% prepared156 total queries

Output Escaping

94% escaped1048 total outputs
Data Flows · Security
7 unsanitized

Data Flow Analysis

23 flows7 with unsanitized paths
process_connect (app\controllers\PrliAuthenticatorController.php:74)
Source (user input) Sink (dangerous op) Sanitizer Transform Unsanitized Sanitized
Attack Surface
20 unprotected

PrettyLinks – Affiliate Links, Link Branding, Link Tracking, Marketing and Stripe Payments Plugin Attack Surface

Entry Points49
Unprotected20

AJAX Handlers 49

authwp_ajax_prli_addon_activateapp\controllers\PrliAddonsController.php:9
authwp_ajax_prli_addon_deactivateapp\controllers\PrliAddonsController.php:10
authwp_ajax_prli_addon_installapp\controllers\PrliAddonsController.php:11
authwp_ajax_pl_dismiss_upgrade_headerapp\controllers\PrliAppController.php:51
authwp_ajax_prli_dismiss_noticeapp\controllers\PrliAppController.php:52
authwp_ajax_prli_dismiss_daily_noticeapp\controllers\PrliAppController.php:53
authwp_ajax_prli_dismiss_monthly_noticeapp\controllers\PrliAppController.php:54
authwp_ajax_validate_pretty_linkapp\controllers\PrliLinksController.php:17
authwp_ajax_reset_pretty_linkapp\controllers\PrliLinksController.php:18
authwp_ajax_prli_quick_createapp\controllers\PrliLinksController.php:19
authwp_ajax_prli_links_list_save_bulk_editapp\controllers\PrliLinksController.php:46
authwp_ajax_prli_onboarding_save_featuresapp\controllers\PrliOnboardingController.php:9
authwp_ajax_prli_onboarding_save_new_linkapp\controllers\PrliOnboardingController.php:10
authwp_ajax_prli_onboarding_save_new_categoryapp\controllers\PrliOnboardingController.php:11
authwp_ajax_prli_onboarding_get_categoryapp\controllers\PrliOnboardingController.php:12
authwp_ajax_prli_onboarding_set_contentapp\controllers\PrliOnboardingController.php:13
authwp_ajax_prli_onboarding_unset_contentapp\controllers\PrliOnboardingController.php:14
authwp_ajax_prli_onboarding_import_linksapp\controllers\PrliOnboardingController.php:15
authwp_ajax_prli_onboarding_mark_content_steps_skippedapp\controllers\PrliOnboardingController.php:16
authwp_ajax_prli_onboarding_mark_steps_completeapp\controllers\PrliOnboardingController.php:17
authwp_ajax_prli_onboarding_unset_categoryapp\controllers\PrliOnboardingController.php:18
authwp_ajax_prli_onboarding_install_correct_editionapp\controllers\PrliOnboardingController.php:19
authwp_ajax_prli_onboarding_install_addonsapp\controllers\PrliOnboardingController.php:20
authwp_ajax_prli_onboarding_load_complete_stepapp\controllers\PrliOnboardingController.php:21
authwp_ajax_prli_onboarding_load_create_new_contentapp\controllers\PrliOnboardingController.php:22
authwp_ajax_prli_onboarding_load_link_step_contentapp\controllers\PrliOnboardingController.php:23
authwp_ajax_prli_onboarding_re_render_links_listapp\controllers\PrliOnboardingController.php:24
authwp_ajax_prli_onboarding_load_finish_stepapp\controllers\PrliOnboardingController.php:25
authwp_ajax_prli_onboarding_finishapp\controllers\PrliOnboardingController.php:26
authwp_ajax_prli_stop_popupapp\controllers\PrliPopupController.php:39
authwp_ajax_prli_delay_popupapp\controllers\PrliPopupController.php:40
authwp_ajax_prli_tinymce_formapp\controllers\PrliPostsController.php:10
authwp_ajax_prli_tinymce_validate_slugapp\controllers\PrliPostsController.php:11
authwp_ajax_prli_create_pretty_linkapp\controllers\PrliPostsController.php:12
authwp_ajax_prli_search_for_linksapp\controllers\PrliPostsController.php:13
authwp_ajax_pl_dismiss_review_promptapp\controllers\PrliReviewNoticeController.php:10
authwp_ajax_prli_stripe_connect_update_credsapp\controllers\PrliStripeConnectController.php:21
authwp_ajax_prli_stripe_connect_refreshapp\controllers\PrliStripeConnectController.php:22
authwp_ajax_prli_stripe_connect_disconnectapp\controllers\PrliStripeConnectController.php:23
authwp_ajax_prli_search_stripe_pricesapp\controllers\PrliStripeController.php:14
authwp_ajax_prli_stripe_add_productapp\controllers\PrliStripeController.php:15
authwp_ajax_prli_dismiss_customer_portal_noticeapp\controllers\PrliStripeController.php:22
authwp_ajax_plp_edge_updatesapp\controllers\PrliUpdateController.php:21
authwp_ajax_prli_activate_licenseapp\controllers\PrliUpdateController.php:28
authwp_ajax_prli_deactivate_licenseapp\controllers\PrliUpdateController.php:29
authwp_ajax_prli_install_license_editionapp\controllers\PrliUpdateController.php:30
authwp_ajax_mosh_addon_activatevendor-prefixed\caseproof\ground-level-mothership\Manager\AddonsManager.php:28
authwp_ajax_mosh_addon_deactivatevendor-prefixed\caseproof\ground-level-mothership\Manager\AddonsManager.php:29
authwp_ajax_mosh_addon_installvendor-prefixed\caseproof\ground-level-mothership\Manager\AddonsManager.php:30
WordPress Hooks 101
actionadmin_enqueue_scriptsapp\controllers\PrliAddonsController.php:7
actionin_admin_headerapp\controllers\PrliAddonsController.php:8
actioninitapp\controllers\PrliAppController.php:24
actionadmin_enqueue_scriptsapp\controllers\PrliAppController.php:25
actionadmin_menuapp\controllers\PrliAppController.php:26
filtercustom_menu_orderapp\controllers\PrliAppController.php:28
filtermenu_orderapp\controllers\PrliAppController.php:29
filtermenu_orderapp\controllers\PrliAppController.php:30
filterdisplay_post_statesapp\controllers\PrliAppController.php:31
actioninitapp\controllers\PrliAppController.php:35
actionwp_dashboard_setupapp\controllers\PrliAppController.php:39
actionafter_plugin_rowapp\controllers\PrliAppController.php:41
actionadmin_noticesapp\controllers\PrliAppController.php:42
actioninitapp\controllers\PrliAppController.php:45
actionin_admin_headerapp\controllers\PrliAppController.php:49
filteradmin_footer_textapp\controllers\PrliAppController.php:57
actionin_admin_footerapp\controllers\PrliAppController.php:58
actioninitapp\controllers\PrliAuthenticatorController.php:16
actioninitapp\controllers\PrliAuthenticatorController.php:17
actionadmin_initapp\controllers\PrliAuthenticatorController.php:18
actioninitapp\controllers\PrliClicksController.php:12
actionadmin_initapp\controllers\PrliClicksController.php:13
actionadmin_footerapp\controllers\PrliFlyoutMenuController.php:9
actionadmin_enqueue_scriptsapp\controllers\PrliGrowthToolsController.php:7
actioninitapp\controllers\PrliLinksController.php:5
filtercron_schedulesapp\controllers\PrliLinksController.php:6
actionprli_cleanup_visitor_locks_workerapp\controllers\PrliLinksController.php:7
actionadmin_initapp\controllers\PrliLinksController.php:8
actionpre_get_postsapp\controllers\PrliLinksController.php:9
actionsave_postapp\controllers\PrliLinksController.php:10
actiondeleted_postapp\controllers\PrliLinksController.php:11
actiontransition_post_statusapp\controllers\PrliLinksController.php:12
actiontransition_post_statusapp\controllers\PrliLinksController.php:13
filterredirect_post_locationapp\controllers\PrliLinksController.php:14
actionadmin_noticesapp\controllers\PrliLinksController.php:15
actionadmin_noticesapp\controllers\PrliLinksController.php:16
filterposts_searchapp\controllers\PrliLinksController.php:22
filterposts_whereapp\controllers\PrliLinksController.php:25
filterposts_fieldsapp\controllers\PrliLinksController.php:26
filterposts_joinapp\controllers\PrliLinksController.php:27
actionrestrict_manage_postsapp\controllers\PrliLinksController.php:30
filterposts_whereapp\controllers\PrliLinksController.php:31
actionposts_orderbyapp\controllers\PrliLinksController.php:37
filterdefault_hidden_columnsapp\controllers\PrliLinksController.php:42
actionquick_edit_custom_boxapp\controllers\PrliLinksController.php:43
actionbulk_edit_custom_boxapp\controllers\PrliLinksController.php:44
actionsave_postapp\controllers\PrliLinksController.php:45
filteradmin_body_classapp\controllers\PrliLinksController.php:47
filterpost_row_actionsapp\controllers\PrliLinksController.php:48
filteradmin_urlapp\controllers\PrliLinksController.php:55
filtersubmenu_fileapp\controllers\PrliLinksController.php:56
actioncurrent_screenapp\controllers\PrliLinksController.php:57
filteracf/input/meta_box_priorityapp\controllers\PrliLinksController.php:59
filtersubmenu_fileapp\controllers\PrliOnboardingController.php:6
actionadmin_enqueue_scriptsapp\controllers\PrliOnboardingController.php:7
actionadmin_noticesapp\controllers\PrliOnboardingController.php:8
actionprli_license_activatedapp\controllers\PrliOnboardingController.php:27
actionprli_license_deactivatedapp\controllers\PrliOnboardingController.php:28
actionadmin_menuapp\controllers\PrliOnboardingController.php:29
actionload-admin_page_pretty-link-onboardingapp\controllers\PrliOnboardingController.php:30
actionadmin_noticesapp\controllers\PrliOnboardingController.php:31
filtermonsterinsights_shareasale_idapp\controllers\PrliOnboardingController.php:32
actionactivated_pluginapp\controllers\PrliOnboardingController.php:33
actionadmin_enqueue_scriptsapp\controllers\PrliPopupController.php:38
actionadmin_noticesapp\controllers\PrliPopupController.php:41
actioninitapp\controllers\PrliPostsController.php:8
actionadd_meta_boxesapp\controllers\PrliPostsController.php:9
filtermce_external_pluginsapp\controllers\PrliPostsController.php:37
filtermce_buttonsapp\controllers\PrliPostsController.php:38
actionadmin_noticesapp\controllers\PrliReviewNoticeController.php:9
actionadmin_initapp\controllers\PrliStripeConnectController.php:17
actionadmin_noticesapp\controllers\PrliStripeConnectController.php:18
actionupdate_option_homeapp\controllers\PrliStripeConnectController.php:19
actionupdate_option_siteurlapp\controllers\PrliStripeConnectController.php:20
actionprli_link_form_after_slug_rowapp\controllers\PrliStripeController.php:8
filterprli_setup_new_varsapp\controllers\PrliStripeController.php:9
filterprli_setup_edit_varsapp\controllers\PrliStripeController.php:10
filterprli_validate_linkapp\controllers\PrliStripeController.php:11
actionprli_update_linkapp\controllers\PrliStripeController.php:12
actionprli_prettypay_link_stripe_redirectapp\controllers\PrliStripeController.php:13
actionwp_enqueue_scriptsapp\controllers\PrliStripeController.php:16
filterthe_contentapp\controllers\PrliStripeController.php:17
actionadmin_footerapp\controllers\PrliStripeController.php:18
actionparse_requestapp\controllers\PrliStripeController.php:19
actionprli-store-optionsapp\controllers\PrliStripeController.php:20
actionprli-options-messageapp\controllers\PrliStripeController.php:21
actioninitapp\controllers\PrliToolsController.php:6
filterpre_set_site_transient_update_pluginsapp\controllers\PrliUpdateController.php:19
actionadmin_initapp\controllers\PrliUpdateController.php:20
filterplugins_apiapp\controllers\PrliUpdateController.php:22
actionadmin_noticesapp\controllers\PrliUpdateController.php:25
actionadmin_initapp\controllers\PrliUpdateController.php:26
actionadmin_enqueue_scriptsapp\controllers\PrliUpdateController.php:27
actionin_plugin_update_message-pretty-link/pretty-link.phpapp\controllers\PrliUpdateController.php:31
actionprli_plugin_edition_changedapp\controllers\PrliUpdateController.php:32
actionadmin_noticesapp\controllers\PrliUpdateController.php:354
filterxmlrpc_methodsapp\controllers\PrliXmlRpcController.php:12
actionplugins_loadedpretty-link.php:175
actionafter_setup_themepretty-link.php:219
filtersite_transient_update_pluginsvendor-prefixed\caseproof\ground-level-mothership\Manager\AddonsManager.php:31
actionadmin_menuvendor-prefixed\caseproof\growth-tools\src\App.php:47

Scheduled Events 1

prli_cleanup_visitor_locks_worker
Maintenance & Trust

PrettyLinks – Affiliate Links, Link Branding, Link Tracking, Marketing and Stripe Payments Plugin Maintenance & Trust

Maintenance Signals

WordPress version tested6.9.4
Last updatedMar 27, 2026
PHP min version7.4
Downloads9.4M

Community Trust

Rating96/100
Number of ratings1,307
Active installs300K
Developer Profile

PrettyLinks – Affiliate Links, Link Branding, Link Tracking, Marketing and Stripe Payments Plugin Developer Profile

Blair Williams

4 plugins · 630K total installs

76
trust score
Avg Security Score
96/100
Avg Patch Time
1044 days
View full developer profile
Detection Fingerprints

How We Detect PrettyLinks – Affiliate Links, Link Branding, Link Tracking, Marketing and Stripe Payments Plugin

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

Asset Fingerprints

Asset Paths
/wp-content/plugins/pretty-link/css/prli-admin.css/wp-content/plugins/pretty-link/css/pretty-link-main.css/wp-content/plugins/pretty-link/css/pretty-link-bootstrap.css/wp-content/plugins/pretty-link/css/pretty-link-vendors.css/wp-content/plugins/pretty-link/js/pretty-link-vendors.js/wp-content/plugins/pretty-link/js/pretty-link-main.js/wp-content/plugins/pretty-link/js/pretty-link-admin.js/wp-content/plugins/pretty-link/js/pretty-link-vue.js+1 more
Script Paths
/wp-content/plugins/pretty-link/js/pretty-link-vendors.js/wp-content/plugins/pretty-link/js/pretty-link-main.js/wp-content/plugins/pretty-link/js/pretty-link-admin.js/wp-content/plugins/pretty-link/js/pretty-link-vue.js
Version Parameters
pretty-link/css/prli-admin.css?ver=pretty-link/css/pretty-link-main.css?ver=pretty-link/css/pretty-link-bootstrap.css?ver=pretty-link/css/pretty-link-vendors.css?ver=pretty-link/js/pretty-link-vendors.js?ver=pretty-link/js/pretty-link-main.js?ver=pretty-link/js/pretty-link-admin.js?ver=pretty-link/js/pretty-link-vue.js?ver=

HTML / DOM Fingerprints

CSS Classes
pretty-link-admin-wrappretty-link-edit-link-sectionpretty-link-link-target-editor
HTML Comments
<!-- Pretty Links Activated -->
Data Attributes
data-pl-link-iddata-pl-link-slugdata-pl-link-targetdata-pl-group-id
JS Globals
PrliLinksPrliLinkMetaPrliUtilsPrettyLinkApiSettingsprettyLinkVueApp
REST Endpoints
/wp-json/pretty-link/v1/links/wp-json/pretty-link/v1/groups
Shortcode Output
[pretty_link id="
FAQ

Frequently Asked Questions about PrettyLinks – Affiliate Links, Link Branding, Link Tracking, Marketing and Stripe Payments Plugin