SurfLink – Link Manager & Backup Restore Security & Risk Analysis

wordpress.org/plugins/surflink

All-in-one Link management: Link Shortener, Auto Linking, Broken Link Checker, Search & Replace, Redirects, 404/410 Manager, Backup & Restore, …

30 active installs v2.6.3 PHP 7.4+ WP 5.6+ Updated Jul 8, 2026
auto-linkbackuplinksredirectsshortlinks
99
A · Safe
CVEs total1
Unpatched0
Last CVEJul 10, 2026
Safety Verdict

Is SurfLink – Link Manager & Backup Restore Safe to Use in 2026?

Generally Safe

Score 99/100

SurfLink – Link Manager & Backup Restore has a strong security track record. Known vulnerabilities have been patched promptly. It's a solid choice for most WordPress installations.

1 known CVELast CVE: Jul 10, 2026Updated 1mo ago
Risk Assessment

The Surflink v2.5.3 plugin demonstrates a generally good security posture with many positive indicators. The vast majority of SQL queries utilize prepared statements, and output escaping is nearly perfect, suggesting a strong understanding of common web vulnerabilities. The absence of known CVEs and a clean vulnerability history further bolster this impression. However, several areas warrant attention. A significant attack surface of 52 AJAX handlers is present, with 9 of these lacking authentication checks. This is a critical concern, as it potentially allows unauthenticated users to trigger plugin functionality. Furthermore, the presence of the `unserialize` function and 7 high-severity taint flows with unsanitized paths indicate potential risks related to deserialization vulnerabilities or mishandling of user-controlled data within the code. While the plugin has no recorded vulnerabilities, these static analysis findings highlight areas where new vulnerabilities could emerge if not addressed. The bundled Freemius v1.0 library, while not explicitly stated as outdated, should be monitored for known vulnerabilities. Overall, Surflink v2.5.3 has strengths in data handling and output sanitization, but the substantial number of unprotected AJAX endpoints and concerning taint flows introduce notable risks that require immediate remediation.

Key Concerns

  • Unprotected AJAX handlers
  • High severity taint flows
  • Dangerous unserialize function used
Vulnerabilities
1 published

SurfLink – Link Manager & Backup Restore Security Vulnerabilities

CVEs by Year

1 CVE in 2026
2026
Patched Has unpatched

Severity Breakdown

Medium
1

1 total CVE

CVE-2026-3552medium · 4.3Missing Authorization

SurfLink < 2.6.0 - Missing Authorization to Authenticated (Subscriber+) 410 Gone URL Import via 'surfl_import_410' AJAX Action

Jul 10, 2026 Patched in 2.6.0 (1d)
Version History

SurfLink – Link Manager & Backup Restore Release Timeline

v2.6.3Current
v2.6.0
v2.5.81 CVE
v2.5.41 CVE
v2.5.21 CVE
v2.5.11 CVE
v2.4.91 CVE
v2.4.81 CVE
v2.4.71 CVE
v2.4.61 CVE
v2.4.51 CVE
v2.4.41 CVE
v2.4.31 CVE
v2.4.11 CVE
v2.3.91 CVE
v2.3.81 CVE
v2.3.71 CVE
v2.3.61 CVE
Code Analysis
Analyzed Mar 16, 2026

SurfLink – Link Manager & Backup Restore Code Analysis

Dangerous Functions
6
Raw SQL Queries
61
160 prepared
Unescaped Output
3
529 escaped
Nonce Checks
20
Capability Checks
50
File Operations
44
External Requests
0
Bundled Libraries
1

Dangerous Functions Found

unserialize$unserialized = @unserialize( $value, [includes\class-surfl-br-replace-engine.php:30
unserialize$unserialized = @unserialize( $data, [includes\class-surfl-br-replace-engine.php:636
unserialize$unserialized = @unserialize( $value, [includes\class-surfl-fast-sr.php:173
unserialize$unserialized = @unserialize( $data, [includes\class-surfl-fast-sr.php:482
unserialize$unserialized = @unserialize( $data, [includes\class-surfl-fast-sr.php:528
unserialize$changes = unserialize($item['contents']);templates\surfl-srh.php:68

Bundled Libraries

Freemius1.0

SQL Query Safety

72% prepared221 total queries

Output Escaping

99% escaped532 total outputs
Data Flows · Security
9 unsanitized

Data Flow Analysis

25 flows9 with unsanitized paths
ajax_finalizing_backup (includes\class-surfl-br-loader.php:1540)
Source (user input) Sink (dangerous op) Sanitizer Transform Unsanitized Sanitized
Attack Surface
9 unprotected

SurfLink – Link Manager & Backup Restore Attack Surface

Entry Points52
Unprotected9

AJAX Handlers 52

authwp_ajax_surfl_delete_single_404_logincludes\class-surfl-404.php:22
authwp_ajax_surfl_make_404_to_410includes\class-surfl-404.php:25
authwp_ajax_surfl_bulk_delete_404_surfl_logsincludes\class-surfl-404.php:28
authwp_ajax_surfl_bulk_make_410includes\class-surfl-404.php:30
authwp_ajax_surfl_empty_404includes\class-surfl-404.php:32
authwp_ajax_surfl_delete_410includes\class-surfl-410.php:26
authwp_ajax_surfl_add_single_410includes\class-surfl-410.php:27
authwp_ajax_surfl_save_edited_410includes\class-surfl-410.php:28
authwp_ajax_surfl_bulk_delete_410includes\class-surfl-410.php:29
authwp_ajax_surfl_empty_410includes\class-surfl-410.php:30
authwp_ajax_surfl_export_410includes\class-surfl-410.php:31
authwp_ajax_surfl_import_410includes\class-surfl-410.php:32
authwp_ajax_surfl_start_backupincludes\class-surfl-br-loader.php:39
authwp_ajax_surfl_run_file_backupincludes\class-surfl-br-loader.php:40
authwp_ajax_surfl_backup_databaseincludes\class-surfl-br-loader.php:41
authwp_ajax_surfl_backup_filesincludes\class-surfl-br-loader.php:43
authwp_ajax_surfl_finalize_backup_fileincludes\class-surfl-br-loader.php:44
authwp_ajax_surfl_finalizing_backupincludes\class-surfl-br-loader.php:45
authwp_ajax_surfl_check_pending_uploadincludes\class-surfl-br-loader.php:46
authwp_ajax_surfl_check_db_infoincludes\class-surfl-br-loader.php:47
authwp_ajax_surfl_delete_uploaded_backup_dirincludes\class-surfl-br-loader.php:48
authwp_ajax_surfl_run_restore_backupincludes\class-surfl-br-loader.php:53
authwp_ajax_surfl_upload_backup_file_chunkincludes\class-surfl-br-loader.php:54
authwp_ajax_surfl_restore_uploaded_backupincludes\class-surfl-br-loader.php:55
authwp_ajax_surfl_run_db_replaceincludes\class-surfl-br-loader.php:56
authwp_ajax_surfl_download_backupincludes\class-surfl-br-loader.php:60
authwp_ajax_surfl_download_backup_directoryincludes\class-surfl-br-loader.php:61
authwp_ajax_surfl_delete_backup_subdirincludes\class-surfl-br-loader.php:64
authwp_ajax_surfl_delete_backup_zip_fileincludes\class-surfl-br-loader.php:65
authwp_ajax_surfl_delete_incomplete_backup_zip_fileincludes\class-surfl-br-loader.php:66
authwp_ajax_surfl_bulk_delete_backupsincludes\class-surfl-br-loader.php:67
authwp_ajax_surfl_empty_backup_directoryincludes\class-surfl-br-loader.php:68
authwp_ajax_surfl_browse_backup_contentsincludes\class-surfl-br-loader.php:71
authwp_ajax_surfl_preview_logincludes\class-surfl-br-loader.php:72
authwp_ajax_surfl_preview_error_logincludes\class-surfl-br-loader.php:73
authwp_ajax_surfl_srh_bulk_actionincludes\class-surfl-fast-sr.php:37
authwp_ajax_surfl_delete_srhincludes\class-surfl-fast-sr.php:38
authwp_ajax_surfl_process_replaceincludes\class-surfl-fast-sr.php:39
authwp_ajax_surfl_process_post_title_replaceincludes\class-surfl-fast-sr.php:40
authwp_ajax_surfl_lh_unban_ipincludes\class-surfl-loginhider.php:50
authwp_ajax_surfl_lh_delete_attempt_ipincludes\class-surfl-loginhider.php:53
authwp_ajax_surfl_lh_bulk_action_attemptsincludes\class-surfl-loginhider.php:56
authwp_ajax_surfl_save_modulesincludes\class-surfl-module-manager.php:10
authwp_ajax_surfl_add_redirect_3includes\class-surfl-redirect.php:23
authwp_ajax_surfl_bulk_add_redirectsincludes\class-surfl-redirect.php:24
authwp_ajax_surfl_bulk_delete_redirectsincludes\class-surfl-redirect.php:25
authwp_ajax_surfl_bulk_change_redirect_typeincludes\class-surfl-redirect.php:26
authwp_ajax_surfl_empty_redirectsincludes\class-surfl-redirect.php:27
authwp_ajax_surfl_export_redirectsincludes\class-surfl-redirect.php:28
authwp_ajax_surfl_import_redirectsincludes\class-surfl-redirect.php:29
authwp_ajax_surfl_save_redirectincludes\class-surfl-redirect.php:30
authwp_ajax_surfl_delete_redirectincludes\class-surfl-redirect.php:31
WordPress Hooks 25
actiontemplate_redirectincludes\class-surfl-404.php:19
actiontemplate_redirectincludes\class-surfl-410.php:25
filterqm/enableincludes\class-surfl-backup-helper.php:204
actionadmin_initincludes\class-surfl-backup-settings.php:18
actionadmin_enqueue_scriptsincludes\class-surfl-loader.php:40
actionadmin_menuincludes\class-surfl-loader.php:499
actionadmin_initincludes\class-surfl-loginhider.php:48
actioninitincludes\class-surfl-loginhider.php:119
actioninitincludes\class-surfl-loginhider.php:121
actioninitincludes\class-surfl-loginhider.php:124
actioninitincludes\class-surfl-loginhider.php:128
filterquery_varsincludes\class-surfl-loginhider.php:131
actionwp_enqueue_scriptsincludes\class-surfl-loginhider.php:134
actionwp_login_failedincludes\class-surfl-loginhider.php:137
actionwp_loginincludes\class-surfl-loginhider.php:139
actionwp_logoutincludes\class-surfl-loginhider.php:141
filterlogin_urlincludes\class-surfl-loginhider.php:143
actiontemplate_redirectincludes\class-surfl-loginhider.php:145
actiontemplate_redirectincludes\class-surfl-redirect.php:40
filterqm/enableincludes\class-surfl-restore-db.php:62
filterqm/enableincludes\class-surfl-restore-db.php:486
actionadmin_initsurf-link.php:64
actionafter_uninstallsurf-link.php:74
filterpricing/show_annual_in_monthlysurf-link.php:75
actionplugins_loadedsurf-link.php:114
Maintenance & Trust

SurfLink – Link Manager & Backup Restore Maintenance & Trust

Maintenance Signals

WordPress version tested7.0.2
Last updatedJul 8, 2026
PHP min version7.4
Downloads6K

Community Trust

Rating100/100
Number of ratings2
Active installs30
Developer Profile

SurfLink – Link Manager & Backup Restore Developer Profile

Surflab

3 plugins · 30 total installs

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

How We Detect SurfLink – Link Manager & Backup Restore

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

Asset Fingerprints

Asset Paths
/wp-content/plugins/surflink/assets/js/surfl.js/wp-content/plugins/surflink/assets/js/redirects.js/wp-content/plugins/surflink/assets/css/surfl.css/wp-content/plugins/surflink/assets/css/enhanced-redirects.css/wp-content/plugins/surflink/assets/css/404-manager.css/wp-content/plugins/surflink/assets/css/shortcodes.css/wp-content/plugins/surflink/assets/css/login-hider.css
Script Paths
/wp-content/plugins/surflink/assets/js/surfl.js/wp-content/plugins/surflink/assets/js/redirects.js
Version Parameters
surfl.js?ver=redirects.js?ver=surfl.css?ver=enhanced-redirects.css?ver=404-manager.css?ver=shortcodes.css?ver=login-hider.css?ver=

HTML / DOM Fingerprints

CSS Classes
surfl-dashboard-wrappersurfl-admin-menusurfl-dashboard-titlesurfl-dashboard-contentsurfl-redirects-tablesurfl-redirect-rowsurfl-404-listsurfl-shortcode-editor-button+2 more
HTML Comments
<!-- DO NOT REMOVE THIS IF, IT IS ESSENTIAL FOR THEfunction_exists CALL ABOVE TO PROPERLY WORK.Include Freemius SDK.Init Freemius.+20 more
Data Attributes
data-surfl-iddata-redirect-iddata-shortcode-typedata-login-hider-setting
JS Globals
surflJqObjSURFL_AJAX_REDIRECTSSURFL_LOGINHIDER_SETTINGSsurfl_localize_data
REST Endpoints
/wp-json/surflink/v1/redirects/wp-json/surflink/v1/404/wp-json/surflink/v1/settings/wp-json/surflink/v1/loginhider
Shortcode Output
[surfl_redirect_list][surfl_404_log][surfl_login_hider_status][surfl_link_shortener_form]
FAQ

Frequently Asked Questions about SurfLink – Link Manager & Backup Restore