LuckyWP Table of Contents Security & Risk Analysis

wordpress.org/plugins/luckywp-table-of-contents

Creates SEO-friendly table of contents for your posts/pages. Works automatically or manually (via shortcode, Gutenberg block or widget).

100K active installs v2.1.14 PHP 5.6.20+ WP 4.7+ Updated Apr 16, 2025
linksnavigationseotable-of-contentstoc
89
A · Safe
CVEs total5
Unpatched0
Last CVEApr 2, 2025
Safety Verdict

Is LuckyWP Table of Contents Safe to Use in 2026?

Generally Safe

Score 89/100

LuckyWP Table of Contents has a strong security track record. Known vulnerabilities have been patched promptly. It's a solid choice for most WordPress installations.

5 known CVEsLast CVE: Apr 2, 2025Updated 1yr ago
Risk Assessment

The luckywp-table-of-contents plugin exhibits a mixed security posture. On the positive side, it demonstrates good practices by utilizing prepared statements for all SQL queries and incorporating nonce checks and capability checks. The absence of dangerous functions, file operations, and external HTTP requests is also a strength. However, a significant concern arises from the large attack surface presented by 11 unprotected AJAX handlers. While taint analysis shows no critical or high severity unsanitized flows, the presence of two flows with unsanitized paths is a potential area of risk that warrants attention, especially given the unprotected entry points.

The plugin's vulnerability history reveals a concerning pattern of 5 medium-severity Cross-Site Scripting (XSS) vulnerabilities. Although all historical CVEs are currently patched, this trend suggests a recurring weakness in input sanitization and output escaping, which is further supported by the static analysis showing only 5% of outputs are properly escaped. This low rate of proper escaping on a large number of outputs (272) significantly increases the risk of XSS vulnerabilities being introduced, even if they are not immediately apparent in the current version.

In conclusion, while the plugin has strengths in its database query handling and some security checks, the extensive unprotected AJAX endpoints and the low rate of output escaping are substantial weaknesses. The past history of XSS vulnerabilities further amplifies these concerns. Mitigation efforts should prioritize addressing the unprotected AJAX handlers and improving output escaping across the plugin's code to prevent future XSS exploits.

Key Concerns

  • 11 unprotected AJAX handlers
  • Low output escaping (5%)
  • 2 flows with unsanitized paths
  • History of 5 medium XSS vulnerabilities
Vulnerabilities
5 published

LuckyWP Table of Contents Security Vulnerabilities

CVEs by Year

4 CVEs in 2024
2024
1 CVE in 2025
2025
Patched Has unpatched

Severity Breakdown

Medium
5

5 total CVEs

CVE-2025-2299medium · 6.1Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

LuckyWP Table of Contents <= 2.1.10 - Cross-Site Request Forgery to Reflected Cross-Site Scripting

Apr 2, 2025 Patched in 2.1.11 (1d)
CVE-2024-9641medium · 4.4Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

LuckyWP Table of Contents <= 2.1.6 - Authenticated (Admin+) Stored Cross-Site Scripting

Nov 21, 2024 Patched in 2.1.7 (58d)
CVE-2024-2119medium · 6.1Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

LuckyWP Table of Contents <= 2.1.5 - Reflected Cross-Site Scripting

May 21, 2024 Patched in 2.1.6 (136d)
CVE-2023-6487medium · 4.4Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

LuckyWP Table of Contents <= 2.1.5 - Authenticated (Administrator+) Cross-Site Scripting

May 21, 2024 Patched in 2.1.5 (136d)
CVE-2024-2953medium · 5.5Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')

LuckyWP Table of Contents <= 2.1.4 - Authenticated (Contributor+) Stored Cross-Site Scripting

May 21, 2024 Patched in 2.1.5 (127d)
Version History

LuckyWP Table of Contents Release Timeline

v2.1.14Current3 files changed
v2.1.136 files changed
v2.1.123 files changed
v2.1.113 files changed
v2.1.101 CVE3 files changed
v2.1.91 CVE3 files changed
v2.1.81 CVE4 files changed
v2.1.71 CVE4 files changed
v2.1.62 CVEs5 files changed
v2.1.53 CVEs16 files changed
v2.1.45 CVEs3 files changed
v2.1.35 CVEs4 files changed
v2.1.25 CVEs4 files changed
v2.1.15 CVEs3 files changed
v2.15 CVEs22 files changed
v2.0.95 CVEs7 files changed
v2.0.85 CVEs17 files changed
v2.0.75 CVEs6 files changed
v2.0.65 CVEs4 files changed
Code Analysis
Analyzed Mar 16, 2026

LuckyWP Table of Contents Code Analysis

Dangerous Functions
0
Raw SQL Queries
0
3 prepared
Unescaped Output
258
14 escaped
Nonce Checks
1
Capability Checks
5
File Operations
0
External Requests
0
Bundled Libraries
0

SQL Query Safety

100% prepared3 total queries

Output Escaping

5% escaped272 total outputs
Data Flows · Security
2 unsanitized

Data Flow Analysis

2 flows2 with unsanitized paths
showTabs (core\wp\Settings.php:415)
Source (user input) Sink (dangerous op) Sanitizer Transform Unsanitized Sanitized
Attack Surface
11 unprotected

LuckyWP Table of Contents Attack Surface

Entry Points11
Unprotected11

AJAX Handlers 11

authwp_ajax_lwptoc_block_editadmin\controllers\EditorBlockController.php:25
authwp_ajax_lwptoc_block_viewadmin\controllers\EditorBlockController.php:26
authwp_ajax_lwptoc_metabox_set_enabledadmin\controllers\MetaboxController.php:25
authwp_ajax_lwptoc_metabox_set_processingadmin\controllers\MetaboxController.php:26
authwp_ajax_lwptoc_metabox_customizeadmin\controllers\MetaboxController.php:27
authwp_ajax_lwptoc_rateadmin\controllers\RateController.php:18
authwp_ajax_lwptoc_rate_show_lateradmin\controllers\RateController.php:19
authwp_ajax_lwptoc_rate_hideadmin\controllers\RateController.php:20
authwp_ajax_lwptoc_shortcode_customizeadmin\controllers\ShortcodeController.php:24
authwp_ajax_lwptoc_shortcode_viewadmin\controllers\ShortcodeController.php:25
authwp_ajax_lwptoc_widget_customizeadmin\controllers\WidgetController.php:26
WordPress Hooks 52
actionadmin_menuadmin\Admin.php:28
actionadmin_enqueue_scriptsadmin\Admin.php:29
actionadd_meta_boxesadmin\Admin.php:30
actionplugins_loadedadmin\controllers\EditorBlockController.php:20
actionplugins_loadedadmin\controllers\MetaboxController.php:20
actioninitadmin\controllers\RateController.php:13
actionadmin_noticesadmin\controllers\RateController.php:15
filterinstall_plugins_nonmenu_tabsadmin\controllers\SettingsController.php:19
filterinstall_plugins_table_api_args_luckywpadmin\controllers\SettingsController.php:23
actionplugins_loadedadmin\controllers\ShortcodeController.php:19
actionplugins_loadedadmin\controllers\WidgetController.php:21
filterdebug_informationadmin\SiteHealth.php:13
actionwp_loadedcore\admin\AdminController.php:20
actionafter_setup_themecore\base\BasePlugin.php:66
actionadmin_initcore\wp\Settings.php:94
actionwp_enqueue_scriptsfront\Front.php:22
actioninitfront\Front.php:23
filterthe_contentfront\Front.php:25
actionwp_footerfront\Front.php:28
actionfl_theme_builder_before_render_contentintegrations\BeaverBuilder.php:16
filterfl_builder_before_render_shortcodesintegrations\BeaverBuilder.php:20
filterlwptoc_need_processing_headingsintegrations\BeaverBuilder.php:24
filterfl_builder_after_render_shortcodesintegrations\BeaverBuilder.php:28
actionelementor/editor/after_enqueue_scriptsintegrations\elementor\Elementor.php:18
filterlwptoc_widget_customize_modal_configintegrations\elementor\Elementor.php:24
filterlwptoc_admin_html_button_attrsintegrations\elementor\Elementor.php:30
actionct_builder_startintegrations\Oxygen.php:15
actionct_builder_startintegrations\Oxygen.php:18
filterrank_math/researches/toc_pluginsintegrations\RankMath.php:13
actionwpv_before_shortcode_post_bodyintegrations\ToolsetViews.php:16
filterthe_contentintegrations\ToolsetViews.php:19
actionlwptoc_disable_autoinsertintegrations\ToolsetViews.php:20
actionwpv_after_shortcode_post_bodyintegrations\ToolsetViews.php:26
actionlwptoc_beforeintegrations\TwentyTwentyTheme.php:12
actionlwptoc_afterintegrations\TwentyTwentyTheme.php:15
filterlwptoc_widget_attrsintegrations\Wpml.php:17
actionlwptoc_widget_attrs_updateintegrations\Wpml.php:18
actiondelete_widgetintegrations\Wpml.php:19
actionadmin_noticesluckywp-table-of-contents.php:29
actioninitplugin\editorBlock\EditorBlock.php:14
actionadmin_initplugin\mcePlugin\McePlugin.php:14
filtermce_cssplugin\mcePlugin\McePlugin.php:20
actionenqueue_block_editor_assetsplugin\mcePlugin\McePlugin.php:21
filtermce_external_pluginsplugin\mcePlugin\McePlugin.php:22
filtermce_buttonsplugin\mcePlugin\McePlugin.php:23
filterthe_contentplugin\Plugin.php:60
filterthe_contentplugin\Plugin.php:61
actionwidgets_initplugin\Plugin.php:62
actionplugins_loadedplugin\Plugin.php:67
actioninitplugin\Plugin.php:89
actioninitplugin\Shortcode.php:29
filterthe_contentplugin\Shortcode.php:32
Maintenance & Trust

LuckyWP Table of Contents Maintenance & Trust

Maintenance Signals

WordPress version tested6.7.5
Last updatedApr 16, 2025
PHP min version5.6.20
Downloads1.1M

Community Trust

Rating98/100
Number of ratings877
Active installs100K
Developer Profile

LuckyWP Table of Contents Developer Profile

LuckyWP

5 plugins · 119K total installs

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

How We Detect LuckyWP Table of Contents

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

Asset Fingerprints

Asset Paths
/wp-content/plugins/luckywp-table-of-contents/admin/assets/main.min.css/wp-content/plugins/luckywp-table-of-contents/admin/assets/main.min.js
Script Paths
/wp-content/plugins/luckywp-table-of-contents/admin/assets/main.min.js
Version Parameters
luckywp-table-of-contents/admin/assets/main.min.css?ver=luckywp-table-of-contents/admin/assets/main.min.js?ver=

HTML / DOM Fingerprints

CSS Classes
lwptoc-container
Data Attributes
data-lwptoc-settings
JS Globals
lwptocMain
FAQ

Frequently Asked Questions about LuckyWP Table of Contents