
| Plugin Name | Sports Club Management |
|---|---|
| Type of Vulnerability | Cross-Site Scripting (XSS) |
| CVE Number | CVE-2026-4871 |
| Urgency | Low |
| CVE Publish Date | 2026-04-07 |
| Source URL | CVE-2026-4871 |
Authenticated Contributor Stored XSS in Sports Club Management (<= 1.12.9): What Site Owners Must Do Now
TL;DR — A stored Cross-Site Scripting (XSS) vulnerability (CVE-2026-4871) has been reported in the Sports Club Management WordPress plugin (versions up to and including 1.12.9). An authenticated user with Contributor privileges can inject malicious content via a field that is later rendered without proper escaping in a “before” attribute context. Because the payload is stored and later executed in the context of site visitors or administrators, the vulnerability can be used for persistent attacks: session theft, privilege escalation, content manipulation, or supply-chain style persistence.
At WP-Firewall we strongly recommend site owners treat this as actionable: restrict contributor accounts, scan for malicious content, virtual-patch via WAF rules, and follow an incident response playbook described below. If you cannot immediately remove or update the plugin, follow the mitigation steps in this article — including our quick WAF rules and database remediation commands.
Why this matters
Stored XSS is among the most dangerous web vulnerabilities because the malicious script is saved on the server and executes whenever the infected page or component is loaded by another user. In this specific case:
- Attack vector: An authenticated user with Contributor privileges (the role often granted to guest authors and some editors) can submit crafted input that becomes stored by the plugin.
- Injection point: The plugin stores and later outputs a value into what is referenced as a
beforeattribute (often rendered into HTML attributes or pseudo-element definitions), and the plugin does not properly escape or sanitize that content before output. - Consequences: If output reaches an administrator, it can be weaponized to steal cookies, hijack sessions, trigger password resets, create new admin users (via chained actions), or execute arbitrary browser actions. If output reaches site visitors, it can be used for defacement, redirecting traffic, or delivering malicious payloads.
Because many sites use Contributor-level access for community content or event submissions, this flaw should be prioritized even if its CVSS or “priority” label appears moderate.
A brief, plain-English technical summary
- The issue is a stored (persistent) Cross-Site Scripting vulnerability affecting Sports Club Management plugin versions <= 1.12.9 (CVE-2026-4871).
- A user with Contributor privileges can insert a payload in a field that is saved to the database.
- The plugin later outputs that field directly into a page context (an attribute named
before) without escaping. In attribute contexts, certain content can break out and execute as script or attach handlers. - Since the content is stored persistently, every time the page or the affected admin screen is viewed, the malicious content runs in the viewer’s browser.
Who is at risk
- Sites that have the Sports Club Management plugin installed and active in versions up to and including 1.12.9.
- Sites that allow Contributor-level accounts or other low-privilege accounts to submit content without manual approval.
- Administrators and editors who view plugin-managed lists, previews, or frontend components that include unescaped stored content.
If your site uses the plugin and accepts user-submitted content (for example, event submissions, team entries, or match reports), treat this as high priority.
Immediate actions (0–24 hours)
- Inventory and isolate
- Identify every site in your environment that uses Sports Club Management <= 1.12.9.
- If possible, take a backup (database + files) before making changes so you can analyze later.
- Remove or disable the plugin when feasible
- If you do not absolutely need the plugin to be active immediately, disable it or uninstall it. This prevents further stored content from being rendered by the plugin code.
- If you cannot fully disable, at minimum switch off public pages it renders (for example, deactivate any shortcodes or widgets the plugin provides).
- Limit user roles and submissions
- Temporarily restrict Contributor accounts. Convert untrusted Contributors to Subscriber or require admin approval before their content goes live.
- Audit all recently created Contributor accounts and disable any suspicious ones.
- Scan and clean
- Run a full site scan (malware and file integrity). Look specifically for suspicious script tags, unusual inline event handlers (onerror, onclick), attributes with
before=strings, or encoded payloads. - Search the database for stored content containing unusual
<script>occurrences,onerror=,javascript:,&#x, and other common XSS markers.
- Run a full site scan (malware and file integrity). Look specifically for suspicious script tags, unusual inline event handlers (onerror, onclick), attributes with
- Apply virtual patching (WAF)
- If you have a Web Application Firewall, create a targeted rule to block requests that attempt to inject suspicious content into fields (see WAF rule examples below).
- Rotate credentials
- Reset account passwords for admin-level users, and force logout for all sessions where possible.
Detection: how to find if you were exploited
Check for the following indicators:
- Newly created admin users or unexpected privilege changes.
- Scheduled tasks (wp_cron entries) that run unfamiliar code.
- Presence of
<script>tags or encoded JavaScript in the database (post content, postmeta, options, plugin-specific tables). - Browser alerts from users reporting redirects, popups, credential prompts, or spam content appearing on pages.
- Unexpected outbound network connections or new files in wp-content/uploads or plugin directories.
Useful search queries (SQL and WP-CLI) for rapid triage:
Search posts and postmeta:
SELECT ID, post_title
FROM wp_posts
WHERE post_content LIKE '%<script%' OR post_content LIKE '%onerror=%' OR post_content LIKE '%javascript:%'
ORDER BY post_date DESC;
Search the options and plugin tables:
SELECT option_name, option_value
FROM wp_options
WHERE option_value LIKE '%before=%' OR option_value LIKE '%<script%' LIMIT 100;
Search plugin-specific tables (example — replace table names as appropriate):
SELECT * FROM wp_scm_events WHERE description LIKE '%<script%';
WP-CLI content search (faster for some hosts):
wp search-replace '<script' '' --skip-columns=guid --dry-run
Note: always run destructive commands in dry-run mode first, and take backups. If you discover malicious content, document it and preserve a copy for further analysis.
How an attacker might exploit this (realistic scenarios)
- An attacker signs up for (or uses an existing) Contributor account and submits a match or event record with a specially crafted value in the vulnerable field. The plugin saves it unescaped.
- Later, an admin visits the plugin’s management screen (or a visitor loads the public listing). The stored payload executes in the admin’s or visitor’s browser.
- If an admin’s session is active, the script may:
- Exfiltrate session cookies to an external server controlled by the attacker.
- Perform actions on behalf of the admin via authenticated AJAX/REST calls (create admin users, change email, export data).
- Modify content to place persistent backdoors for further access.
Because web browsers do not differentiate between server-originated script and malicious script in the same origin, the attacker can escalate from low-privilege contributor to site compromise without server access.
Risk assessment: how severe is it?
From a technical perspective, stored XSS that reaches admin users or editors can be used for full site takeover. The CVSS-like scores you see in vulnerability trackers are helpful for triage, but risk for a specific site depends on:
- Whether Contributor-level accounts are allowed.
- Whether the vulnerable output is rendered in admin contexts.
- Whether site administrators are active and visit the affected screens.
If your site permits external contributors, or if a small administrative team uses the plugin frequently, treat this as high business-impact even if the vulnerability is categorized as “low” by some automated scoring systems.
Code-level explanation and secure fixes for developers
If you maintain sites or modify plugins, here’s how to fix the bug properly in code:
- Sanitize on input (defense-in-depth)
- When saving user input, sanitize values according to expected content. If the field should be plain text, use
sanitize_text_field().
- When saving user input, sanitize values according to expected content. If the field should be plain text, use
- Escape on output (primary defense)
- Always escape variables before echoing into HTML attributes or content. Use WordPress functions:
- For HTML attribute context:
esc_attr( $value ) - For HTML body context:
esc_html( $value ) - For data passed to JavaScript:
wp_json_encode()oresc_js()
Example: insecure output
echo '<div data-before="' . $before . '"></div>';Secure output
echo '<div data-before="' . esc_attr( $before ) . '"></div>';If the value is used in a JavaScript context:
<?php ?> <script> var beforeVal = <?php echo wp_json_encode( $before ); ?>; </script> <?php - Use proper attribute contexts for pseudo-elements
- If the plugin injects CSS via
styleblocks using pseudo-elements (::before), ensure the value is not injected into raw CSS without strict sanitization. Avoid generating CSS from user-submitted values whenever possible. If necessary, validate input against a whitelist and escape withesc_attr()when placed in attributes that will be processed into CSS.
- If the plugin injects CSS via
- Capabilities & nonce checks
- Ensure save and update actions check for user capabilities and nonces. While Contributor can create content, they should not be able to submit content that changes plugin configuration or data that is later rendered in privileged contexts.
Example ModSecurity / WAF rules for virtual patching
If a vendor patch is not yet available or you cannot update immediately, add virtual patching rules that block or log exploit attempts. Below are example rules to block obvious payloads targeting the before attribute or suspicious content. Tweak and test carefully to avoid false positives.
Example ModSecurity rule (conceptual — test before deploying):
# Block requests attempting to inject script tags or event handlers into parameters named "before"
SecRule ARGS_NAMES|ARGS "@rx (?i)before" "phase:2,deny,log,status:403,id:100001,msg:'Block suspicious attempt to inject into before attribute'"
SecRule ARGS|REQUEST_BODY "@rx (?i)(<\s*script|on\w+\s*=|javascript:|&#x?3c;script|%3Cscript|<svgon)" "phase:2,deny,log,status:403,id:100002,msg:'Block XSS payload in request'"
</code></pre>
<p>More targeted: detect a <code>before</code> parameter containing angle brackets:</p>
<pre><code>SecRule ARGS:before "@rx [<>]" "phase:2,deny,log,status:403,id:100003,msg:'Reject injection to before parameter containing < or >'"
</code></pre>
<p>Notes:</p>
<ul>
<li>These rules are temporary mitigations. They reduce attack surface while you apply an official patch or remove the plugin.</li>
<li>Closely monitor false positives — test against legitimate content flows (for example any allowed HTML in submissions).</li>
<li>If you use a managed WAF with UI, create rule conditions to: block requests where a <code>before</code> parameter includes <code><script</code> or <code>onerror=</code>, and add logging to capture source IPs.</li>
</ul>
<hr>
<h2>Database cleanup and remediation examples</h2>
<p>If you find malicious stored content, remove or sanitize it. Always create a full backup before making changes.</p>
<p>Search-and-remove script tags in post content (example SQL):</p>
<pre><code>-- Replace <script ...>...</script> with a safe placeholder
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(post_content, '<script[^>]*>.*?</script>', '[removed script]', 'gi')
WHERE post_content REGEXP '<script[^>]*>.*?</script>';
</code></pre>
<p>Search for <code>before=</code> strings:</p>
<pre><code>SELECT ID, post_title, post_content FROM wp_posts WHERE post_content LIKE '%before=%' LIMIT 100;
</code></pre>
<p>If plugin stores content in custom tables, search those tables:</p>
<pre><code>SELECT * FROM wp_scm_options WHERE value LIKE '%<script%' OR value LIKE '%onerror=%';
</code></pre>
<p>WP-CLI method to strip scripts from posts:</p>
<pre><code>wp db query "UPDATE wp_posts SET post_content = REPLACE(post_content, '<script', '<removed-script') WHERE post_content LIKE '%<script%';"
</code></pre>
<p>Again: make backups before mass changes. Consider exporting suspect rows for offline forensic review.</p>
<hr>
<h2>Monitoring and follow-up hardening (1–4 weeks)</h2>
<ul>
<li>Harden user registration and the Contributor workflow:
<ul>
<li>Require manual approval for new Contributor accounts, or disable public account creation entirely.</li>
<li>Use a plugin/workflow that requires admin review before publishing user-submitted content.</li>
</ul>
</li>
<li>Implement Content Security Policy (CSP)
<ul>
<li>A strict CSP can mitigate the impact of XSS by preventing inline script execution and disallowing loads from untrusted domains. Example header:</li>
</ul>
<pre><code>Content-Security-Policy: default-src 'self'; script-src 'self' https://trusted.cdn.com; object-src 'none'; base-uri 'self';
</code></pre>
<p>CSP is defense-in-depth and can significantly limit the effectiveness of stored XSS.</p>
</li>
<li>File and code integrity
<ul>
<li>Implement file integrity checks (monitor core/plugin file modifications).</li>
<li>Lock down file permissions and prevent PHP execution in <code>wp-content/uploads</code> via .htaccess or webserver config.</li>
</ul>
</li>
<li>Logging & alerting
<ul>
<li>Ensure you capture access logs and WAF logs. Alert on spikes in requests to plugin endpoints or repeated blocked events.</li>
</ul>
</li>
<li>Regular vulnerability scanning
<ul>
<li>Schedule periodic scans of plugins/themes to detect known vulnerabilities and outdated components.</li>
</ul>
</li>
</ul>
<hr>
<h2>Incident response checklist (concise playbook)</h2>
<ol>
<li>Preserve evidence: take full site backup, export suspicious DB rows and logs.</li>
<li>Contain: disable plugin or take site to maintenance mode; block offending IPs.</li>
<li>Eradicate:
<ul>
<li>Remove malicious payloads from DB.</li>
<li>Replace modified core/plugin files from a clean source.</li>
<li>Remove unknown admin users.</li>
</ul>
</li>
<li>Recover:
<ul>
<li>Rotate all high-privilege credentials and API keys.</li>
<li>Re-enable services after verification.</li>
</ul>
</li>
<li>Post-incident:
<ul>
<li>Perform root cause analysis.</li>
<li>Apply fixes: update plugin or patch code as described.</li>
<li>Report to stakeholders and document lessons learned.</li>
</ul>
</li>
</ol>
<p>If you don’t have internal resources for this work, engage a professional incident response provider with WordPress experience.</p>
<hr>
<h2>How WP-Firewall helps (our approach)</h2>
<p>At WP-Firewall we treat these events as time-sensitive operational problems. Our protection and services are built around fast detection and mitigation:</p>
<ul>
<li>Managed WAF rules tuned for WordPress plugin vectors — including attribute injection and stored XSS patterns — so you can apply virtual patches instantly.</li>
<li>Malware scanning that hunts for stored scripts in posts, postmeta, options, and custom plugin tables.</li>
<li>Session and login hardening tools to stop attackers from weaponizing XSS to escalate into full site takeover.</li>
<li>Guided incident response playbooks that match the steps above with one-click or assisted remediation flows.</li>
</ul>
<p>We test WAF rules for low false-positive rates and help you tune the rules for your site’s content model. If you want to ensure your site is constantly protected from exploit attempts while waiting for vendor fixes, virtual patching is an effective interim layer.</p>
<hr>
<h2>Title: Secure your site — get started with WP-Firewall Free plan</h2>
<p>If you’re worried about immediate protection while you investigate or remediate, consider our Basic (Free) plan. It includes an actively managed firewall, unlimited bandwidth, WAF protections, malware scanning, and mitigations for OWASP Top 10 risks. Sign up and enable a baseline of protection quickly: <a href="https://my.wp-firewall.com/buy/wp-firewall-free-plan/" target="_blank" rel="noopener noreferrer">https://my.wp-firewall.com/buy/wp-firewall-free-plan/</a></p>
<p>(We also offer Standard and Pro tiers if you want automatic malware removal, IP blacklisting/whitelisting, monthly security reports, and virtual patching services.)</p>
<hr>
<h2>Practical examples: sample signatures and queries</h2>
<ol>
<li><strong>Simple search to find occurrences of <code>before="</code> or <code>data-before</code> in your DB:</strong>
<pre><code>SELECT ID, post_title, post_content FROM wp_posts WHERE post_content LIKE '%before=%' OR post_content LIKE '%data-before%';
</code></pre>
</li>
<li><strong>Identify posts added or edited recently (possible pivot points for an exploit):</strong>
<pre><code>SELECT ID, post_title, post_date, post_modified, post_author
FROM wp_posts
WHERE post_date >= DATE_SUB(NOW(), INTERVAL 30 DAY)
ORDER BY post_date DESC;
</code></pre>
</li>
<li><strong>Check for new admin users created recently:</strong>
<pre><code>SELECT ID, user_login, user_email, user_registered
FROM wp_users
WHERE ID IN (SELECT user_id FROM wp_usermeta WHERE meta_key = 'wp_capabilities' AND meta_value LIKE '%administrator%')
AND user_registered >= DATE_SUB(NOW(), INTERVAL 30 DAY);
</code></pre>
</li>
</ol>
<hr>
<h2>What to tell your team or clients</h2>
<ul>
<li>Immediate action: restrict Contributor posting privileges until a plugin patch is available or you’ve implemented virtual patching.</li>
<li>If you host community-generated content, add manual review and approval steps.</li>
<li>Treat stored XSS reaching admin screens as a potential site compromise and follow incident response steps.</li>
</ul>
<hr>
<h2>Final notes and recommended next steps</h2>
<ul>
<li>Update vigilance: once a vendor patch is released, apply the update promptly and verify the upgrade removed the vulnerability.</li>
<li>Continue to monitor logs and perform scans for at least 30 days following remediation — attackers sometimes leave delayed triggers or secondary backdoors.</li>
<li>Consider adding a virtual patch via WAF as a short- to medium-term mitigation strategy that allows time to test and deploy vendor patches safely.</li>
</ul>
<p>If you would like help implementing the specific WAF rules or running the database searches above, the WP-Firewall team can assist with guided steps or managed services. Our free plan provides immediate basic protection (WAF + scanning) that can be turned on in minutes at: <a href="https://my.wp-firewall.com/buy/wp-firewall-free-plan/" target="_blank" rel="noopener noreferrer">https://my.wp-firewall.com/buy/wp-firewall-free-plan/</a></p>
<hr>
<p>If you prefer, we can provide a short, exportable checklist for your SOC or hosting provider with the exact SQL queries, ModSecurity rule snippets, and a step-by-step remediation plan tailored to your site. Contact our team and reference the Sports Club Management (<=1.12.9) stored XSS advisory for priority support.</p>
<p>Stay safe — WP-Firewall Security Team</p>
</div>
<div id="graphcomment"></div>
<script type="ff0ac7a80e06b606e2f86350-text/javascript">
/* - - - CONFIGURATION VARIABLES - - - */
var __semio__params = {
graphcommentId: "WP-Firewall", // make sure the id is yours
behaviour: {
// HIGHLY RECOMMENDED
// uid: "...", // uniq identifer for the comments thread on your page (ex: your page id)
},
// configure your variables here
}
/* - - - DON'T EDIT BELOW THIS LINE - - - */
function __semio__onload() {
__semio__gc_graphlogin(__semio__params)
}
(function() {
var gc = document.createElement('script'); gc.type = 'text/javascript'; gc.async = true;
gc.onload = __semio__onload; gc.defer = true; gc.src = 'https://integration.graphcomment.com/gc_graphlogin.js?' + Date.now();
(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(gc);
})();
</script>
<hr class="wp-block-separator has-alpha-channel-opacity"/>
<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="2240" height="1003" src="/assets/uploads/2024/05/wordpress-security-update-banner.jpeg" alt="wordpress security update banner" class="wp-image-1359" srcset"/assets/uploads/2024/05/wordpress-security-update-banner.jpeg 2240w, /assets/uploads/2024/05/wordpress-security-update-banner-300x134.jpeg 300w, /assets/uploads/2024/05/wordpress-security-update-banner-1024x459.jpeg 1024w, /assets/uploads/2024/05/wordpress-security-update-banner-768x344.jpeg 768w, /assets/uploads/2024/05/wordpress-security-update-banner-1536x688.jpeg 1536w, /assets/uploads/2024/05/wordpress-security-update-banner-2048x917.jpeg 2048w, /assets/uploads/2024/05/wordpress-security-update-banner-360x161.jpeg 360w, /assets/uploads/2024/05/wordpress-security-update-banner-1320x591.jpeg 1320w" sizes="(max-width: 2240px) 100vw, 2240px" /></figure>
<div class="
mailpoet_form_popup_overlay
"></div>
<div
id="mailpoet_form_1"
class="
mailpoet_form
mailpoet_form_shortcode
mailpoet_form_position_
mailpoet_form_animation_
"
>
<style type="text/css">
#mailpoet_form_1 .mailpoet_form { }
#mailpoet_form_1 form { margin-bottom: 0; }
#mailpoet_form_1 p.mailpoet_form_paragraph { margin-bottom: 10px; }
#mailpoet_form_1 .mailpoet_column_with_background { padding: 10px; }
#mailpoet_form_1 .mailpoet_form_column:not(:first-child) { margin-left: 20px; }
#mailpoet_form_1 .mailpoet_paragraph { line-height: 20px; margin-bottom: 20px; }
#mailpoet_form_1 .mailpoet_segment_label, #mailpoet_form_1 .mailpoet_text_label, #mailpoet_form_1 .mailpoet_textarea_label, #mailpoet_form_1 .mailpoet_select_label, #mailpoet_form_1 .mailpoet_radio_label, #mailpoet_form_1 .mailpoet_checkbox_label, #mailpoet_form_1 .mailpoet_list_label, #mailpoet_form_1 .mailpoet_date_label { display: block; font-weight: normal; }
#mailpoet_form_1 .mailpoet_text, #mailpoet_form_1 .mailpoet_textarea, #mailpoet_form_1 .mailpoet_select, #mailpoet_form_1 .mailpoet_date_month, #mailpoet_form_1 .mailpoet_date_day, #mailpoet_form_1 .mailpoet_date_year, #mailpoet_form_1 .mailpoet_date { display: block; }
#mailpoet_form_1 .mailpoet_text, #mailpoet_form_1 .mailpoet_textarea { width: 200px; }
#mailpoet_form_1 .mailpoet_checkbox { }
#mailpoet_form_1 .mailpoet_submit { }
#mailpoet_form_1 .mailpoet_divider { }
#mailpoet_form_1 .mailpoet_message { }
#mailpoet_form_1 .mailpoet_form_loading { width: 30px; text-align: center; line-height: normal; }
#mailpoet_form_1 .mailpoet_form_loading > span { width: 5px; height: 5px; background-color: #5b5b5b; }#mailpoet_form_1{border-radius: 0px;text-align: left;}#mailpoet_form_1 form.mailpoet_form {padding: 10px;}#mailpoet_form_1{width: 100%;}#mailpoet_form_1 .mailpoet_message {margin: 0; padding: 0 20px;}
#mailpoet_form_1 .mailpoet_validate_success {color: #00d084}
#mailpoet_form_1 input.parsley-success {color: #00d084}
#mailpoet_form_1 select.parsley-success {color: #00d084}
#mailpoet_form_1 textarea.parsley-success {color: #00d084}
#mailpoet_form_1 .mailpoet_validate_error {color: #cf2e2e}
#mailpoet_form_1 input.parsley-error {color: #cf2e2e}
#mailpoet_form_1 select.parsley-error {color: #cf2e2e}
#mailpoet_form_1 textarea.textarea.parsley-error {color: #cf2e2e}
#mailpoet_form_1 .parsley-errors-list {color: #cf2e2e}
#mailpoet_form_1 .parsley-required {color: #cf2e2e}
#mailpoet_form_1 .parsley-custom-error-message {color: #cf2e2e}
#mailpoet_form_1 .mailpoet_paragraph.last {margin-bottom: 0} @media (max-width: 500px) {#mailpoet_form_1 {background-image: none;}} @media (min-width: 500px) {#mailpoet_form_1 .last .mailpoet_paragraph:last-child {margin-bottom: 0}} @media (max-width: 500px) {#mailpoet_form_1 .mailpoet_form_column:last-child .mailpoet_paragraph:last-child {margin-bottom: 0}}
</style>
<form
target="_self"
method="post"
action="https://wp-firewall.com/wp-admin/admin-post.php?action=mailpoet_subscription_form"
class="mailpoet_form mailpoet_form_form mailpoet_form_shortcode"
novalidate
data-delay=""
data-exit-intent-enabled=""
data-trigger-mode=""
data-click-trigger-selector=""
data-font-family=""
data-cookie-expiration-time=""
>
<input type="hidden" name="data[form_id]" value="1" />
<input type="hidden" name="token" value="76a1c8fe3b" />
<input type="hidden" name="api_version" value="v1" />
<input type="hidden" name="endpoint" value="subscribers" />
<input type="hidden" name="mailpoet_method" value="subscribe" />
<label class="mailpoet_hp_email_label" style="display: none !important;">Please leave this field empty<input type="email" name="data[email]"/></label><div class='mailpoet_spacer' style='height: 10px;'></div>
<h2 class="mailpoet-heading mailpoet-has-font-size" style="text-align: center; color: #0214d1; font-size: 20px; line-height: 1.5"><span style="font-family: Montserrat" data-font="Montserrat" class="mailpoet-has-font"><strong>Receive WP Security Weekly for Free 👋<br>Signup Now</strong></span>!!</h2>
<p class="mailpoet_form_paragraph mailpoet-has-font-size" style="text-align: center; color: #000000; font-size: 14px; line-height: 1.5"><strong><span style="font-family: Montserrat" data-font="Montserrat" class="mailpoet-has-font">Sign up to receive WordPress Security Update in your inbox, every week.</span></strong></p>
<div class="mailpoet_paragraph "><input type="email" autocomplete="email" class="mailpoet_text" id="form_email_1" name="data[form_field_NDQyNzVkNWRlYmIxX2VtYWls]" title="Email Address" value="" style="width:100%;box-sizing:border-box;background-color:#f1f1f1;border-style:solid;border-radius:40px !important;border-width:0px;border-color:#313131;padding:15px;margin: 0 auto 0 0;font-family:'Montserrat';font-size:15px;line-height:1.5;height:auto;" data-automation-id="form_email" placeholder="Email Address *" aria-label="Email Address *" data-parsley-errors-container=".mailpoet_error_1ych5" data-parsley-required="true" required aria-required="true" data-parsley-minlength="6" data-parsley-maxlength="150" data-parsley-type-message="This value should be a valid email." data-parsley-required-message="This field is required."/><span class="mailpoet_error_1ych5"></span></div>
<div class="mailpoet_paragraph "><input type="submit" class="mailpoet_submit" value="Let’s keep in touch" data-automation-id="subscribe-submit-button" data-font-family='Montserrat' style="width:100%;box-sizing:border-box;background-color:#0214d1;border-style:solid;border-radius:40px !important;border-width:0px;border-color:#313131;padding:15px;margin: 0 auto 0 0;font-family:'Montserrat';font-size:15px;line-height:1.5;height:auto;color:#ffffff;font-weight:bold;" /><span class="mailpoet_form_loading"><span class="mailpoet_bounce1"></span><span class="mailpoet_bounce2"></span><span class="mailpoet_bounce3"></span></span></div>
<p class="mailpoet_form_paragraph mailpoet-has-font-size" style="text-align: center; font-size: 13px; line-height: 1.5"><em>We don’t spam! Read our <a target="_blank" href="https://wp-firewall.com/privacy-policy/">privacy policy</a> for more info.</em></p>
<div class="mailpoet_message">
<p class="mailpoet_validate_success"
style="display:none;"
>Check your inbox or spam folder to confirm your subscription.
</p>
<p class="mailpoet_validate_error"
style="display:none;"
> </p>
</div>
</form>
</div>
</div></article> </main>
</div>
</div>
</div>
<div class="site-footer">
<div class="gb-container gb-container-231dff91"><div class="gb-inside-container">
<h3 class="gb-headline gb-headline-392c1785"><span class="gb-icon"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 8.145 54.189"><path d="M4.262 40.052V0l-.439.438v39.613l.439.001zm-.439 3.853v9.845l.438.438.001-10.284-.439.001zm3.883-11.29v17.518l.439-.439V32.615h-.439zm0-8.273h.439V9.495l-.439-.439v15.286zM.439 21.074V4.056L0 4.495l.001 16.579h.438zm.001 6.274l-.439-.001v19.347l.439.439V27.348z"></path></svg></span></h3>
</div></div>
<div class="gb-container gb-container-df85b0d1"><div class="gb-inside-container">
<div class="gb-container gb-container-d6d0b9ea"><div class="gb-inside-container">
<div class="gb-grid-wrapper gb-grid-wrapper-eef6e45a">
<div class="gb-grid-column gb-grid-column-14d665b5"><div class="gb-container gb-container-14d665b5"><div class="gb-inside-container">
<h4 class="gb-headline gb-headline-55bf7d89 gb-headline-text">Contact us to schedule a complimentary WordPress Security consultation</h4>
</div></div></div>
<div class="gb-grid-column gb-grid-column-981e7791"><div class="gb-container gb-container-981e7791"><div class="gb-inside-container">
<div class="gb-button-wrapper gb-button-wrapper-31812854">
<a class="gb-button gb-button-eb30be39" href="https://wp-firewall.com/contact" target="_blank" rel="noopener noreferrer"><span class="gb-button-text">Contact Us</span><span class="gb-icon"><svg viewBox="0 0 16 16" class="bi bi-arrow-right-short" fill="currentColor" height="16" width="16" xmlns="http://www.w3.org/2000/svg"> <path d="M4 8a.5.5 0 0 1 .5-.5h5.793L8.146 5.354a.5.5 0 1 1 .708-.708l3 3a.5.5 0 0 1 0 .708l-3 3a.5.5 0 0 1-.708-.708L10.293 8.5H4.5A.5.5 0 0 1 4 8z" fill-rule="evenodd"></path> </svg></span></a>
</div>
</div></div></div>
</div>
</div></div>
<div class="gb-grid-wrapper gb-grid-wrapper-1f9744c6">
<div class="gb-grid-column gb-grid-column-67f4907e"><div class="gb-container gb-container-67f4907e"><div class="gb-inside-container">
<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="313" height="313" src="/assets/uploads/2022/11/WP_Firewall-logo_Nov2022-02.png" alt="" class="wp-image-942" style="width:78px;height:78px" srcset"/assets/uploads/2022/11/WP_Firewall-logo_Nov2022-02.png 313w, /assets/uploads/2022/11/WP_Firewall-logo_Nov2022-02-300x300.png 300w, /assets/uploads/2022/11/WP_Firewall-logo_Nov2022-02-150x150.png 150w" sizes="auto, (max-width: 313px) 100vw, 313px" /></figure>
</div></div></div>
<div class="gb-grid-column gb-grid-column-956cd96f"><div class="gb-container gb-container-956cd96f"><div class="gb-inside-container">
<p class="gb-headline gb-headline-b7fa610a gb-headline-text">WP-Firewall<br>6/F, The Rays, 71 Hung To Road, Kwun Tong, Kowloon, Hong Kong</p>
</div></div></div>
<div class="gb-grid-column gb-grid-column-dc9b7928"><div class="gb-container gb-container-dc9b7928"><div class="gb-inside-container">
<div class="gb-button-wrapper gb-button-wrapper-4b2e3c63">
<a class="gb-button gb-button-79519911" href="https://wp-firewall.com/services/"><span class="gb-icon"><svg aria-hidden="true" height="1em" width="1em" viewBox="0 0 256 512" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path></svg></span><span class="gb-button-text">Features</span></a>
<a class="gb-button gb-button-dda6c846" href="https://wp-firewall.com/pricing/"><span class="gb-icon"><svg aria-hidden="true" height="1em" width="1em" viewBox="0 0 256 512" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path></svg></span><span class="gb-button-text">Pricing</span></a>
<a class="gb-button gb-button-94099ac2" href="https://wp-firewall.com/blog/"><span class="gb-icon"><svg aria-hidden="true" height="1em" width="1em" viewBox="0 0 256 512" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path></svg></span><span class="gb-button-text">Blog</span></a>
<a class="gb-button gb-button-abee0c2d" href="https://my.wp-firewall.com/" target="_blank" rel="noopener noreferrer"><span class="gb-icon"><svg aria-hidden="true" height="1em" width="1em" viewBox="0 0 256 512" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path></svg></span><span class="gb-button-text">Login</span></a>
</div>
<div class="gb-button-wrapper gb-button-wrapper-52987a9b">
<a class="gb-button gb-button-bc169fbc" href="https://www.linkedin.com/company/wp-firewall/" target="_blank" rel="noopener noreferrer"><span class="gb-icon"><svg aria-hidden="true" height="1em" width="1em" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M100.28 448H7.4V148.9h92.88zM53.79 108.1C24.09 108.1 0 83.5 0 53.8a53.79 53.79 0 0 1 107.58 0c0 29.7-24.1 54.3-53.79 54.3zM447.9 448h-92.68V302.4c0-34.7-.7-79.2-48.29-79.2-48.29 0-55.69 37.7-55.69 76.7V448h-92.78V148.9h89.08v40.8h1.3c12.4-23.5 42.69-48.3 87.88-48.3 94 0 111.28 61.9 111.28 142.3V448z"></path></svg></span></a>
<a class="gb-button gb-button-01beaade" href="https://x.com/WPFirewall" target="_blank" rel="noopener noreferrer"><span class="gb-icon"><svg aria-hidden="true" role="img" height="1em" width="1em" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M389.2 48h70.6L305.6 224.2 487 464H345L233.7 318.6 106.5 464H35.8L200.7 275.5 26.8 48H172.4L272.9 180.9 389.2 48zM364.4 421.8h39.1L151.1 88h-42L364.4 421.8z"></path></svg></span></a>
<a class="gb-button gb-button-95ca849b" href="https://www.facebook.com/profile.php?id=100080056374443" target="_blank" rel="noopener noreferrer"><span class="gb-icon"><svg aria-hidden="true" role="img" height="1em" width="1em" viewBox="0 0 320 512" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M279.14 288l14.22-92.66h-88.91v-60.13c0-25.35 12.42-50.06 52.24-50.06h40.42V6.26S260.43 0 225.36 0c-73.22 0-121.08 44.38-121.08 124.72v70.62H22.89V288h81.39v224h100.17V288z"></path></svg></span></a>
<a class="gb-button gb-button-b32939b7" href="https://wp-firewall.com/get-a-quote/" target="_blank" rel="noopener noreferrer"><span class="gb-icon"><svg aria-hidden="true" role="img" height="1em" width="1em" viewBox="0 0 512 512" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M464 64H48C21.49 64 0 85.49 0 112v288c0 26.51 21.49 48 48 48h416c26.51 0 48-21.49 48-48V112c0-26.51-21.49-48-48-48zm0 48v40.805c-22.422 18.259-58.168 46.651-134.587 106.49-16.841 13.247-50.201 45.072-73.413 44.701-23.208.375-56.579-31.459-73.413-44.701C106.18 199.465 70.425 171.067 48 152.805V112h416zM48 400V214.398c22.914 18.251 55.409 43.862 104.938 82.646 21.857 17.205 60.134 55.186 103.062 54.955 42.717.231 80.509-37.199 103.053-54.947 49.528-38.783 82.032-64.401 104.947-82.653V400H48z"></path></svg></span></a>
</div>
</div></div></div>
<div class="gb-grid-column gb-grid-column-aa49ddc2"><div class="gb-container gb-container-aa49ddc2"><div class="gb-inside-container">
<div class="gb-button-wrapper gb-button-wrapper-bcad4449">
<a class="gb-button gb-button-ad9b7bcc" href="https://wp-firewall.com/privacy-policy/"><span class="gb-icon"><svg aria-hidden="true" height="1em" width="1em" viewBox="0 0 256 512" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path></svg></span><span class="gb-button-text">Privacy Policy</span></a>
<a class="gb-button gb-button-09fece8d" href="https://wp-firewall.com/terms-of-service/"><span class="gb-icon"><svg aria-hidden="true" height="1em" width="1em" viewBox="0 0 256 512" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path></svg></span><span class="gb-button-text">Terms of Service</span></a>
<a class="gb-button gb-button-bd070240" href="https://wp-firewall.com/docs/"><span class="gb-icon"><svg aria-hidden="true" height="1em" width="1em" viewBox="0 0 256 512" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path></svg></span><span class="gb-button-text">Docs</span></a>
<a class="gb-button gb-button-1215814a" href="https://wp-firewall.com/affiliate-partnership-application/" target="_blank" rel="noopener noreferrer"><span class="gb-icon"><svg aria-hidden="true" height="1em" width="1em" viewBox="0 0 256 512" xmlns="http://www.w3.org/2000/svg"><path fill="currentColor" d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"></path></svg></span><span class="gb-button-text">Affiliate</span></a>
</div>
<div class="trp-shortcode-switcher__wrapper"
style="--bg:#ffffff;--bg-hover:#0000000d;--text:#143852;--text-hover:#1d2327;--border:1px solid #1438521a;--border-width:1px;--border-color:#1438521a;--border-radius:5px;--flag-radius:2px;--flag-size:18px;--aspect-ratio:4/3;--font-size:14px;--transition-duration:0.2s"
role="group"
data-open-mode="hover">
<!-- ANCHOR (in-flow only; sizing/borders; inert) -->
<div class="trp-language-switcher trp-ls-dropdown trp-shortcode-switcher trp-shortcode-anchor trp-open-on-hover"
aria-hidden="true"
inert
data-no-translation>
<div class="trp-current-language-item__wrapper">
<a class="trp-language-item trp-language-item__default trp-language-item__current" data-no-translation href="https://wp-firewall.com/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="English"><span class="trp-language-item-name">English</span></a> <svg class="trp-shortcode-arrow" width="20" height="20" viewBox="0 0 20 21" fill="none" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg">
<path d="M5 8L10 13L15 8" stroke="var(--text)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
</div>
<!-- OVERLAY (positioned; interactive surface) -->
<div class="trp-language-switcher trp-ls-dropdown trp-shortcode-switcher trp-shortcode-overlay trp-open-on-hover"
role="navigation"
aria-label="Website language selector"
data-no-translation
>
<div class="trp-current-language-item__wrapper">
<div class="trp-language-item trp-language-item__default trp-language-item__current" data-no-translation role="button" aria-expanded="false" tabindex="0" aria-label="Change language" aria-controls="trp-shortcode-dropdown-6a8b1e16ef528"><span class="trp-language-item-name">English</span></div> <svg class="trp-shortcode-arrow" width="20" height="20" viewBox="0 0 20 21" fill="none" aria-hidden="true" focusable="false" xmlns="http://www.w3.org/2000/svg">
<path d="M5 8L10 13L15 8" stroke="var(--text)" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</svg>
</div>
<div class="trp-switcher-dropdown-list"
id="trp-shortcode-dropdown-6a8b1e16ef528"
role="group"
aria-label="Available languages"
hidden
inert
>
<a class="trp-language-item" href="https://wp-firewall.com/zh_cn/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="简体中文">
<span class="trp-language-item-name" data-no-translation>简体中文</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/zh_hk/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="香港中文">
<span class="trp-language-item-name" data-no-translation>香港中文</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/zh_tw/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="繁體中文">
<span class="trp-language-item-name" data-no-translation>繁體中文</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/ja/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="日本語">
<span class="trp-language-item-name" data-no-translation>日本語</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/es/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="Español">
<span class="trp-language-item-name" data-no-translation>Español</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/fr/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="Français">
<span class="trp-language-item-name" data-no-translation>Français</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/ar/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="العربية">
<span class="trp-language-item-name" data-no-translation>العربية</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/hi/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="हिन्दी">
<span class="trp-language-item-name" data-no-translation>हिन्दी</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/bn/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="বাংলা">
<span class="trp-language-item-name" data-no-translation>বাংলা</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/ko/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="한국어">
<span class="trp-language-item-name" data-no-translation>한국어</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/it/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="Italiano">
<span class="trp-language-item-name" data-no-translation>Italiano</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/pt/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="Português">
<span class="trp-language-item-name" data-no-translation>Português</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/nl/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="Nederlands">
<span class="trp-language-item-name" data-no-translation>Nederlands</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/vi/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="Tiếng Việt">
<span class="trp-language-item-name" data-no-translation>Tiếng Việt</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/ru/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="Русский">
<span class="trp-language-item-name" data-no-translation>Русский</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/pl/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="Polski">
<span class="trp-language-item-name" data-no-translation>Polski</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/de/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="Deutsch">
<span class="trp-language-item-name" data-no-translation>Deutsch</span>
</a>
<a class="trp-language-item" href="https://wp-firewall.com/da/securing-sports-club-plugin-against-xss-attacks-published-on-2026-04-07-cve-2026-4871-3/" title="Dansk">
<span class="trp-language-item-name" data-no-translation>Dansk</span>
</a>
</div>
</div>
</div>
</div></div></div>
</div>
<p class="gb-headline gb-headline-bb5da184 gb-headline-text">© 2026 WP-Firewall™</p>
</div></div></div>
<nav id="generate-slideout-menu" class="main-navigation slideout-navigation" itemtype="https://schema.org/SiteNavigationElement" itemscope>
<div class="inside-navigation grid-container grid-parent">
<button class="slideout-exit has-svg-icon"><span class="gp-icon pro-close">
<svg viewBox="0 0 512 512" aria-hidden="true" role="img" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="1em" height="1em">
<path d="M71.029 71.029c9.373-9.372 24.569-9.372 33.942 0L256 222.059l151.029-151.03c9.373-9.372 24.569-9.372 33.942 0 9.372 9.373 9.372 24.569 0 33.942L289.941 256l151.03 151.029c9.372 9.373 9.372 24.569 0 33.942-9.373 9.372-24.569 9.372-33.942 0L256 289.941l-151.029 151.03c-9.373 9.372-24.569 9.372-33.942 0-9.372-9.373-9.372-24.569 0-33.942L222.059 256 71.029 104.971c-9.372-9.373-9.372-24.569 0-33.942z" />
</svg>
</span> <span class="screen-reader-text">Close</span></button><div class="main-nav"><ul id="menu-main-menu-1" class=" slideout-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1652"><a href="https://wp-firewall.com/features/">Features</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1024"><a href="https://wp-firewall.com/pricing/">Pricing</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page current_page_parent menu-item-162"><a href="https://wp-firewall.com/blog/">Blog</a></li>
<li class="menu-item menu-item-type-post_type_archive menu-item-object-docs menu-item-has-children menu-item-1077"><a href="https://wp-firewall.com/docs/">Docs<span role="presentation" class="dropdown-menu-toggle"><span class="gp-icon icon-arrow"><svg viewBox="0 0 330 512" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path d="M305.913 197.085c0 2.266-1.133 4.815-2.833 6.514L171.087 335.593c-1.7 1.7-4.249 2.832-6.515 2.832s-4.815-1.133-6.515-2.832L26.064 203.599c-1.7-1.7-2.832-4.248-2.832-6.514s1.132-4.816 2.832-6.515l14.162-14.163c1.7-1.699 3.966-2.832 6.515-2.832 2.266 0 4.815 1.133 6.515 2.832l111.316 111.317 111.316-111.317c1.7-1.699 4.249-2.832 6.515-2.832s4.815 1.133 6.515 2.832l14.162 14.163c1.7 1.7 2.833 4.249 2.833 6.515z" /></svg></span></span></a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-post_type menu-item-object-docs menu-item-1078"><a href="https://wp-firewall.com/docs/how-to-install-wp-firewall-free-plan/">Docs – How to install WP-Firewall free plan?</a></li>
</ul>
</li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-667"><a href="https://wp-firewall.com/about/">About<span role="presentation" class="dropdown-menu-toggle"><span class="gp-icon icon-arrow"><svg viewBox="0 0 330 512" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path d="M305.913 197.085c0 2.266-1.133 4.815-2.833 6.514L171.087 335.593c-1.7 1.7-4.249 2.832-6.515 2.832s-4.815-1.133-6.515-2.832L26.064 203.599c-1.7-1.7-2.832-4.248-2.832-6.514s1.132-4.816 2.832-6.515l14.162-14.163c1.7-1.699 3.966-2.832 6.515-2.832 2.266 0 4.815 1.133 6.515 2.832l111.316 111.317 111.316-111.317c1.7-1.699 4.249-2.832 6.515-2.832s4.815 1.133 6.515 2.832l14.162 14.163c1.7 1.7 2.833 4.249 2.833 6.515z" /></svg></span></span></a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1258"><a href="https://wp-firewall.com/get-a-quote/">Get A Quote</a></li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1291"><a href="https://wp-firewall.com/affiliate-partnership-application/">Affiliate</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1257"><a href="https://wp-firewall.com/contact/">Contact Us</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-privacy-policy menu-item-1025"><a rel="privacy-policy" href="https://wp-firewall.com/privacy-policy/">Privacy Policy</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1026"><a href="https://wp-firewall.com/cookie-policy/">Cookie Policy</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1027"><a href="https://wp-firewall.com/terms-of-service/">Terms of Service</a></li>
</ul>
</li>
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-1240"><a href="https://my.wp-firewall.com">Login<span role="presentation" class="dropdown-menu-toggle"><span class="gp-icon icon-arrow"><svg viewBox="0 0 330 512" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" width="1em" height="1em"><path d="M305.913 197.085c0 2.266-1.133 4.815-2.833 6.514L171.087 335.593c-1.7 1.7-4.249 2.832-6.515 2.832s-4.815-1.133-6.515-2.832L26.064 203.599c-1.7-1.7-2.832-4.248-2.832-6.514s1.132-4.816 2.832-6.515l14.162-14.163c1.7-1.699 3.966-2.832 6.515-2.832 2.266 0 4.815 1.133 6.515 2.832l111.316 111.317 111.316-111.317c1.7-1.699 4.249-2.832 6.515-2.832s4.815 1.133 6.515 2.832l14.162 14.163c1.7 1.7 2.833 4.249 2.833 6.515z" /></svg></span></span></a>
<ul class="sub-menu">
<li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1304"><a href="https://my.wp-firewall.com/buy/wp-firewall-free-plan/">Signup</a></li>
<li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-1377"><a href="https://wp-firewall.com/wp-security-weekly-update-monthly-subscription-with-15-days-free-trial/">Signup 15 Days Free – WP Security Weekly Update</a></li>
</ul>
</li>
</ul></div> </div><!-- .inside-navigation -->
</nav><!-- #site-navigation -->
<div class="slideout-overlay">
</div>
<template id="tp-language" data-tp-language="en_US"></template><script type="speculationrules">
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/wp-content/uploads/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/generatepress/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
</script>
<script id="independent-analytics-script" type="ff0ac7a80e06b606e2f86350-text/javascript">
// Do not change this comment line otherwise Speed Optimizer won't be able to detect this script
(function () {
function sendRequest(url, body) {
if(!window.fetch) {
const xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
xhr.send(JSON.stringify(body))
return
}
const request = fetch(url, {
method: 'POST',
body: JSON.stringify(body),
keepalive: true,
headers: {
'Content-Type': 'application/json;charset=UTF-8'
}
});
}
const calculateParentDistance = (child, parent) => {
let count = 0;
let currentElement = child;
// Traverse up the DOM tree until we reach parent or the top of the DOM
while (currentElement && currentElement !== parent) {
currentElement = currentElement.parentNode;
count++;
}
// If parent was not found in the hierarchy, return -1
if (!currentElement) {
return -1; // Indicates parent is not an ancestor of element
}
return count; // Number of layers between element and parent
}
const isMatchingClass = (linkRule, href, classes, ids) => {
return classes.includes(linkRule.value)
}
const isMatchingId = (linkRule, href, classes, ids) => {
return ids.includes(linkRule.value)
}
const isMatchingDomain = (linkRule, href, classes, ids) => {
if(!URL.canParse(href)) {
return false
}
const url = new URL(href)
const host = url.host
const hostsToMatch = [host]
if(host.startsWith('www.')) {
hostsToMatch.push(host.substring(4))
} else {
hostsToMatch.push('www.' + host)
}
return hostsToMatch.includes(linkRule.value)
}
const isMatchingExtension = (linkRule, href, classes, ids) => {
if(!URL.canParse(href)) {
return false
}
const url = new URL(href)
return url.pathname.endsWith('.' + linkRule.value)
}
const isMatchingSubdirectory = (linkRule, href, classes, ids) => {
if(!URL.canParse(href)) {
return false
}
const url = new URL(href)
return url.pathname.startsWith('/' + linkRule.value + '/')
}
const isMatchingProtocol = (linkRule, href, classes, ids) => {
if(!URL.canParse(href)) {
return false
}
const url = new URL(href)
return url.protocol === linkRule.value + ':'
}
const isMatchingExternal = (linkRule, href, classes, ids) => {
if(!URL.canParse(href) || !URL.canParse(document.location.href)) {
return false
}
const matchingProtocols = ['http:', 'https:']
const siteUrl = new URL(document.location.href)
const linkUrl = new URL(href)
// Links to subdomains will appear to be external matches according to JavaScript,
// but the PHP rules will filter those events out.
return matchingProtocols.includes(linkUrl.protocol) && siteUrl.host !== linkUrl.host
}
const isMatch = (linkRule, href, classes, ids) => {
switch (linkRule.type) {
case 'class':
return isMatchingClass(linkRule, href, classes, ids)
case 'id':
return isMatchingId(linkRule, href, classes, ids)
case 'domain':
return isMatchingDomain(linkRule, href, classes, ids)
case 'extension':
return isMatchingExtension(linkRule, href, classes, ids)
case 'subdirectory':
return isMatchingSubdirectory(linkRule, href, classes, ids)
case 'protocol':
return isMatchingProtocol(linkRule, href, classes, ids)
case 'external':
return isMatchingExternal(linkRule, href, classes, ids)
default:
return false;
}
}
const track = (element) => {
const href = element.href ?? null
const classes = Array.from(element.classList)
const ids = [element.id]
const linkRules = [{"type":"extension","value":"pdf"},{"type":"extension","value":"zip"},{"type":"protocol","value":"mailto"},{"type":"protocol","value":"tel"}]
if(linkRules.length === 0) {
return
}
// For link rules that target an id, we need to allow that id to appear
// in any ancestor up to the 7th ancestor. This loop looks for those matches
// and counts them.
linkRules.forEach((linkRule) => {
if(linkRule.type !== 'id') {
return;
}
const matchingAncestor = element.closest('#' + linkRule.value)
if(!matchingAncestor || matchingAncestor.matches('html, body')) {
return;
}
const depth = calculateParentDistance(element, matchingAncestor)
if(depth < 7) {
ids.push(linkRule.value)
}
});
// For link rules that target a class, we need to allow that class to appear
// in any ancestor up to the 7th ancestor. This loop looks for those matches
// and counts them.
linkRules.forEach((linkRule) => {
if(linkRule.type !== 'class') {
return;
}
const matchingAncestor = element.closest('.' + linkRule.value)
if(!matchingAncestor || matchingAncestor.matches('html, body')) {
return;
}
const depth = calculateParentDistance(element, matchingAncestor)
if(depth < 7) {
classes.push(linkRule.value)
}
});
const hasMatch = linkRules.some((linkRule) => {
return isMatch(linkRule, href, classes, ids)
})
if(!hasMatch) {
return
}
const url = "https://wp-firewall.com/wp-content/plugins/independent-analytics-pro/iawp-click-endpoint.php";
const body = {
href: href,
classes: classes.join(' '),
ids: ids.join(' '),
...{"payload":{"resource":"singular","singular_id":6343,"page":1},"signature":"20210723b855c1051df1a3b4fd9ab10f"} };
sendRequest(url, body)
}
let hasSearched = false;
function search() {
if(hasSearched) {
return;
}
hasSearched = true;
if (document.hasOwnProperty("visibilityState") && document.visibilityState === "prerender") {
return;
}
if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
return;
}
let referrer_url = null;
if (typeof document.referrer === 'string' && document.referrer.length > 0) {
referrer_url = document.referrer;
}
const params = location.search.slice(1).split('&').reduce((acc, s) => {
const [k, v] = s.split('=');
return Object.assign(acc, {[k]: v});
}, {});
const url = "https://wp-firewall.com/wp-json/iawp/search";
const body = {
referrer_url,
utm_source: params.utm_source,
utm_medium: params.utm_medium,
utm_campaign: params.utm_campaign,
utm_term: params.utm_term,
utm_content: params.utm_content,
gclid: params.gclid,
...{"payload":{"resource":"singular","singular_id":6343,"page":1},"signature":"20210723b855c1051df1a3b4fd9ab10f"} };
sendRequest(url, body)
}
document.addEventListener('mousedown', function (event) {
if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
return;
}
const element = event.target.closest('a')
if(!element) {
return
}
const isPro = true
if(!isPro) {
return
}
// Don't track left clicks with this event. The click event is used for that.
if(event.button === 0) {
return
}
track(element)
})
document.addEventListener('click', function (event) {
if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
return;
}
const element = event.target.closest('a, button, input[type="submit"], input[type="button"]')
if(!element) {
return
}
const isPro = true
if(!isPro) {
return
}
track(element)
})
document.addEventListener('play', function (event) {
if (navigator.webdriver || /bot|crawler|spider|crawling|semrushbot|chrome-lighthouse/i.test(navigator.userAgent)) {
return;
}
const element = event.target.closest('audio, video')
if(!element) {
return
}
const isPro = true
if(!isPro) {
return
}
track(element)
}, true)
document.addEventListener("DOMContentLoaded", function (e) {
search();
});
document.addEventListener("iawpSearch", function (e) {
search();
});
})();
</script>
<script type="ff0ac7a80e06b606e2f86350-text/javascript">document.querySelectorAll('.playHtListenArea').forEach(function(el) {el.style.display = 'block'});</script>
<script type="ff0ac7a80e06b606e2f86350-text/javascript">
var _paq = _paq || [];
_paq.push(['setCustomDimension', 1, '{"ID":1,"name":"WP-FIREWALL SECURITY TEAM","avatar":"c55b9a07a5b2ac6d76d736e92833a232"}']);
_paq.push(['trackPageView']);
(function () {
var u = "https://analytics1.wpmudev.com/";
_paq.push(['setTrackerUrl', u + 'track/']);
_paq.push(['setSiteId', '16840']);
var d = document, g = d.createElement('script'), s = d.getElementsByTagName('script')[0];
g.type = 'text/javascript';
g.async = true;
g.defer = true;
g.src = 'https://analytics.wpmucdn.com/matomo.js';
s.parentNode.insertBefore(g, s);
})();
</script>
<script id="generate-a11y" type="ff0ac7a80e06b606e2f86350-text/javascript">
!function(){"use strict";if("querySelector"in document&&"addEventListener"in window){var e=document.body;e.addEventListener("pointerdown",(function(){e.classList.add("using-mouse")}),{passive:!0}),e.addEventListener("keydown",(function(){e.classList.remove("using-mouse")}),{passive:!0})}}();
</script>
<script id="imagesloaded-js" src="https://wp-firewall.com/wp-includes/js/imagesloaded.min.js?ver=5.0.0" type="ff0ac7a80e06b606e2f86350-text/javascript"></script>
<script id="masonry-js" src="https://wp-firewall.com/wp-includes/js/masonry.min.js?ver=4.2.2" type="ff0ac7a80e06b606e2f86350-text/javascript"></script>
<script id="betterdocs-categorygrid-js" src="https://wp-firewall.com/wp-content/plugins/betterdocs/assets/blocks/categorygrid/frontend.js?ver=a4a7e7ed1fd9a2aaf85a" type="ff0ac7a80e06b606e2f86350-text/javascript"></script>
<script id="generate-offside-js-extra" type="ff0ac7a80e06b606e2f86350-text/javascript">
var offSide = {"side":"right"};
//# sourceURL=generate-offside-js-extra
</script>
<script id="generate-offside-js" src="https://wp-firewall.com/wp-content/plugins/gp-premium/menu-plus/functions/js/offside.min.js?ver=2.5.5" type="ff0ac7a80e06b606e2f86350-text/javascript"></script>
<script id="betterlinks-app-js-extra" type="ff0ac7a80e06b606e2f86350-text/javascript">
var betterLinksApp = {"betterlinks_nonce":"8aa37a2d44","ajaxurl":"https://wp-firewall.com/wp-admin/admin-ajax.php","site_url":"https://wp-firewall.com","rest_url":"https://wp-firewall.com/wp-json/","nonce":"9e48b1bf7b","betterlinkspro_version":"2.5.0"};
//# sourceURL=betterlinks-app-js-extra
</script>
<script id="betterlinks-app-js" src="https://wp-firewall.com/wp-content/plugins/betterlinks/assets/js/betterlinks.app.core.min.js?ver=82f05e9a0c750678d3cc" type="ff0ac7a80e06b606e2f86350-text/javascript"></script>
<script id="generate-menu-js-before" type="ff0ac7a80e06b606e2f86350-text/javascript">
var generatepressMenu = {"toggleOpenedSubMenus":true,"openSubMenuLabel":"Open Sub-Menu","closeSubMenuLabel":"Close Sub-Menu"};
//# sourceURL=generate-menu-js-before
</script>
<script id="generate-menu-js" src="https://wp-firewall.com/wp-content/themes/generatepress/assets/js/menu.min.js?ver=3.6.1" type="ff0ac7a80e06b606e2f86350-text/javascript"></script>
<script id="googlesitekit-consent-mode-js" src="https://wp-firewall.com/wp-content/plugins/google-site-kit/dist/assets/js/googlesitekit-consent-mode-bc2e26cfa69fcd4a8261.js" type="ff0ac7a80e06b606e2f86350-text/javascript"></script>
<script id="wp-consent-api-js-extra" type="ff0ac7a80e06b606e2f86350-text/javascript">
var consent_api = {"consent_type":"","waitfor_consent_hook":"","cookie_expiration":"30","cookie_prefix":"wp_consent","services":[{"name":"WPMUDEV Dashboard","category":"statistics"}]};
//# sourceURL=wp-consent-api-js-extra
</script>
<script id="wp-consent-api-js" src="https://wp-firewall.com/wp-content/plugins/wp-consent-api/assets/js/wp-consent-api.min.js?ver=2.0.0" type="ff0ac7a80e06b606e2f86350-text/javascript"></script>
<script id="mailpoet_public-js-extra" type="ff0ac7a80e06b606e2f86350-text/javascript">
var MailPoetForm = {"ajax_url":"https://wp-firewall.com/wp-admin/admin-ajax.php","is_rtl":"","ajax_common_error_message":"An error has happened while performing a request, please try again later.","captcha_input_label":"Type in the characters you see in the picture above:","captcha_reload_title":"Reload CAPTCHA","captcha_audio_title":"Play CAPTCHA","assets_url":"https://wp-firewall.com/wp-content/plugins/mailpoet/assets","collect_subscriber_timezones":"1"};
//# sourceURL=mailpoet_public-js-extra
</script>
<script data-wp-strategy="defer" defer id="mailpoet_public-js" src="https://wp-firewall.com/wp-content/plugins/mailpoet/assets/dist/js/public.js?ver=5.27.0" type="ff0ac7a80e06b606e2f86350-text/javascript"></script>
<script id="wp-emoji-settings" type="application/json">
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://wp-firewall.com/wp-includes/js/wp-emoji-release.min.js?ver=7.1"}}
</script>
<script type="ff0ac7a80e06b606e2f86350-module">
/*! This file is auto-generated */
var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
//# sourceURL=https://wp-firewall.com/wp-includes/js/wp-emoji-loader.min.js
</script>
<!-- Usermaven - privacy-friendly analytics tool -->
<script type="ff0ac7a80e06b606e2f86350-text/javascript">
(function () {
window.usermaven = window.usermaven || (function () { (window.usermavenQ = window.usermavenQ || []).push(arguments); })
var t = document.createElement('script'),
s = document.getElementsByTagName('script')[0];
t.defer = true;
t.id = 'um-tracker';
t.setAttribute('data-tracking-host', 'https://u.wp-firewall.com');
t.setAttribute('data-key', 'UMZJ8b2F3H');
t.setAttribute('data-autocapture', 'true'); t.setAttribute('data-randomize-url', 'true');
t.src = 'https://u.wp-firewall.com/lib.js';
s.parentNode.insertBefore(t, s);
})();
</script>
<!-- / Usermaven -->
<script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="ff0ac7a80e06b606e2f86350-|49" defer></script><script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v4513226cdae34746b4dedf0b4dfa099e1781791509496" integrity="sha512-ZE9pZaUXND66v380QUtch/5sE9tPFh2zg45pR2PB0CVkCtOREv2AJKkSidISWkysEuQ0EH8faUU5du78bx87UQ==" data-cf-beacon='{"version":"2024.11.0","token":"d5aa7aab42e44391befc9d4326f845dc","r":1}' crossorigin="anonymous"></script>
</body>
</html>
<!--
Performance optimized by Redis Object Cache. Learn more: https://wprediscache.com
Retrieved 10903 objects (2 MB) from Redis using PhpRedis (v6.1.0).
-->
