{"id":309518,"date":"2026-05-31T10:35:19","date_gmt":"2026-05-31T10:35:19","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/checkout-integrity-guardian-for-woocommerce\/"},"modified":"2026-05-31T13:25:45","modified_gmt":"2026-05-31T13:25:45","slug":"toply-skimshield","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/toply-skimshield\/","author":23401951,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.4","stable_tag":"1.0.4","tested":"7.0","requires":"5.8","requires_php":"7.4","requires_plugins":null,"header_name":"Toply SkimShield","header_author":"toply","header_description":"Real-time script integrity monitoring, Content Security Policy automation, and PCI-DSS compliance reporting for WooCommerce checkout. No external API dependencies.","assets_banners_color":"0e1c2d","last_updated":"2026-05-31 13:25:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wordpress.org\/plugins\/toply-skimshield\/","header_author_uri":"https:\/\/profiles.wordpress.org\/toply\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":36,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"toply","date":"2026-05-31 10:35:00"},"1.0.1":{"tag":"1.0.1","author":"toply","date":"2026-05-31 13:08:04"},"1.0.2":{"tag":"1.0.2","author":"toply","date":"2026-05-31 13:17:34"},"1.0.3":{"tag":"1.0.3","author":"toply","date":"2026-05-31 13:22:45"},"1.0.4":{"tag":"1.0.4","author":"toply","date":"2026-05-31 13:25:45"}},"upgrade_notice":{"1.0.4":"<p>Fix: full script path now visible in whitelist and incidents tables.<\/p>","1.0.3":"<p>Fix: incidents badge now excludes resolved incidents.<\/p>","1.0.2":"<p>Adds bulk resolve and bulk approve actions for faster incident management.<\/p>","1.0.1":"<p>Bug fix: Incidents tab now correctly displays all recorded security incidents.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3555435,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3555435,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3555435,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3555435,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0","1.0.1","1.0.2","1.0.3","1.0.4"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"Dashboard \u2014 overview of protection status, recent incidents, and CSP policy","2":"Script Whitelist \u2014 all checkout scripts with one-click approve\/block actions","3":"Incidents log \u2014 full history of detected anomalies with severity levels","4":"PCI-DSS Compliance Report \u2014 printable compliance report for auditors","5":"Settings \u2014 configure monitoring, alerts, and CSP behavior"}},"plugin_section":[],"plugin_tags":[3148,265161,265160,600,286],"plugin_category":[45,54],"plugin_contributors":[259546],"plugin_business_model":[],"class_list":["post-309518","plugin","type-plugin","status-publish","hentry","plugin_tags-checkout","plugin_tags-pci-dss","plugin_tags-script-monitoring","plugin_tags-security","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-security-and-spam-protection","plugin_contributors-toply","plugin_committers-toply"],"banners":{"banner":"https:\/\/ps.w.org\/toply-skimshield\/assets\/banner-772x250.png?rev=3555435","banner_2x":"https:\/\/ps.w.org\/toply-skimshield\/assets\/banner-1544x500.png?rev=3555435","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/toply-skimshield\/assets\/icon-128x128.png?rev=3555435","icon_2x":"https:\/\/ps.w.org\/toply-skimshield\/assets\/icon-256x256.png?rev=3555435","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<h4>The Problem<\/h4>\n\n<p>Imagine a hacker silently adds a piece of JavaScript code to your WooCommerce checkout page. Every time a customer types in their credit card number, that hidden code copies it and sends it to the hacker \u2014 without you or your customer ever knowing. This type of attack is called <strong>checkout skimming<\/strong>, and it is one of the most common ways online stores get compromised.<\/p>\n\n<p>Toply SkimShield protects you by watching your checkout page and alerting you the moment anything changes.<\/p>\n\n<h4>How It Works<\/h4>\n\n<p><strong>Step 1 \u2014 Takes a snapshot<\/strong>\nWhen you run the first scan, the plugin looks at every JavaScript file loaded on your checkout page and saves a unique fingerprint (a hash) for each one. This becomes your approved baseline \u2014 the \"normal\" state of your checkout.<\/p>\n\n<p><strong>Step 2 \u2014 Watches for changes<\/strong>\nEvery time someone visits your checkout page, the plugin silently compares the live scripts against that saved baseline. If everything matches, nothing happens. If a new script appears or an existing one has been modified, the plugin raises an alert immediately.<\/p>\n\n<p><strong>Step 3 \u2014 Notifies you by email<\/strong>\nThe moment a suspicious change is detected, you receive an email with details: which script changed, what it looked like before, what it looks like now, and a direct link to review it in your dashboard.<\/p>\n\n<p><strong>Step 4 \u2014 You decide what is legitimate<\/strong>\nIn the admin dashboard you see a list of all scripts found on your checkout page. You approve the ones you recognise (WooCommerce, Stripe, PayPal, Google Analytics, etc.) and block anything that looks suspicious. The plugin remembers your decisions.<\/p>\n\n<p><strong>Step 5 \u2014 Optionally block unauthorised scripts entirely (CSP)<\/strong>\nOnce you have approved all your legitimate scripts, you can turn on the Content Security Policy feature. This tells the browser: \"do not run any script on the checkout page that is not on the approved list.\" Even if a hacker manages to inject a script, the browser will refuse to execute it.<\/p>\n\n<h4>Think of It Like a Security Camera for Your Checkout<\/h4>\n\n<p>The first scan registers who is allowed in. Every visit after that checks: is there anyone new? If yes \u2014 alarm. No technical knowledge required to use it.<\/p>\n\n<h4>Features<\/h4>\n\n<ul>\n<li><strong>Script monitoring<\/strong> \u2014 detects new or modified scripts on every checkout page load<\/li>\n<li><strong>Instant email alerts<\/strong> \u2014 notified the moment something changes, via the standard WordPress email system<\/li>\n<li><strong>Script whitelist<\/strong> \u2014 approve or block scripts with one click from the admin dashboard<\/li>\n<li><strong>Content Security Policy<\/strong> \u2014 automatically generates a CSP header based on your approved scripts; start in Report-Only mode to avoid breaking checkout, then switch to Enforce when ready<\/li>\n<li><strong>PCI-DSS compliance report<\/strong> \u2014 generates a printable report covering requirements 6.4.3 and 12.10, ready to show to your payment processor or auditor<\/li>\n<li><strong>No external dependencies<\/strong> \u2014 everything runs on your own server, no API keys, no third-party services, no data sent anywhere<\/li>\n<\/ul>\n\n<h4>Who Needs This<\/h4>\n\n<ul>\n<li>Any WooCommerce store that accepts card payments<\/li>\n<li>Store owners who want to know immediately if their checkout page is tampered with<\/li>\n<li>Agencies managing WooCommerce stores on behalf of clients<\/li>\n<li>Stores that need to demonstrate PCI-DSS compliance<\/li>\n<\/ul>\n\n<h3>How to Test This Plugin<\/h3>\n\n<p><strong>Prerequisites:<\/strong> WooCommerce must be active with at least one published product and a functioning checkout page (your shop must have a <code>\/checkout\/<\/code> page set up by WooCommerce).<\/p>\n\n<p><strong>Step-by-step test procedure:<\/strong><\/p>\n\n<ol>\n<li><p><strong>Install and activate<\/strong> the plugin. Navigate to <strong>SkimShield<\/strong> in the admin sidebar.<\/p><\/li>\n<li><p><strong>Run a manual scan<\/strong> \u2014 on the Dashboard tab, click the <strong>Scan Now<\/strong> button. The plugin fetches the WooCommerce checkout page and extracts every script tag (both external <code>&lt;script src=\"\u2026\"&gt;<\/code> and inline <code>&lt;script&gt;\u2026&lt;\/script&gt;<\/code>).<\/p><\/li>\n<li><p><strong>View detected scripts<\/strong> \u2014 click the <strong>Script Whitelist<\/strong> tab. You will see a table listing all scripts found on the checkout page, each with its handle, source URL (or inline snippet), type (enqueued\/inline), SHA-256 hash, and status (Pending).<\/p><\/li>\n<li><p><strong>Approve scripts<\/strong> \u2014 click the <strong>Approve<\/strong> button next to each legitimate script. The status changes to \"Approved\".<\/p><\/li>\n<li><p><strong>Verify real-time monitoring<\/strong> \u2014 visit your store's checkout page as a normal visitor (front-end). The plugin hooks into <code>wp_enqueue_scripts<\/code> at priority <code>PHP_INT_MAX<\/code> and records every script loaded. New scripts trigger an entry in the Incidents log.<\/p><\/li>\n<li><p><strong>Check the Incidents tab<\/strong> \u2014 any scripts detected for the first time generate an incident with severity \"High\". A hash change (simulating a tampering event) generates a \"Critical\" incident.<\/p><\/li>\n<li><p><strong>Test email alerts<\/strong> \u2014 make sure the Alert Email address in <strong>Settings<\/strong> is a deliverable inbox. Visit the checkout page with a browser. If any new script is detected, an HTML email is sent immediately via <code>wp_mail()<\/code>.<\/p><\/li>\n<li><p><strong>Enable CSP (optional)<\/strong> \u2014 go to <strong>Settings<\/strong>, enable \"CSP Header\", leave \"Report-Only Mode\" checked, and save. Visit the checkout page. The <code>Content-Security-Policy-Report-Only<\/code> HTTP header will now be present (verify with browser DevTools \u2192 Network \u2192 checkout request headers).<\/p><\/li>\n<li><p><strong>Generate a compliance report<\/strong> \u2014 click the <strong>PCI-DSS Report<\/strong> tab and review the auto-generated report covering requirements 6.4.3 and 12.10.<\/p><\/li>\n<\/ol>\n\n<p><strong>Expected results after running Scan Now:<\/strong>\n- The Script Whitelist tab shows all scripts that are on the checkout page\n- Each row shows the script handle, source, type (enqueued or inline), a truncated SHA-256 hash, and status\n- Approve\/Block\/Remove action buttons are functional\n- The Dashboard shows the count of Approved, Pending, and Blocked scripts<\/p>\n\n<h3>External services<\/h3>\n\n<p>This plugin does <strong>not<\/strong> connect to any external service for its core functionality. All script monitoring and hashing is performed locally on your server.<\/p>\n\n<p>The auto-generated Content Security Policy (CSP) template includes default <code>frame-src<\/code> origins for common payment gateways (<code>https:\/\/www.paypal.com<\/code>, <code>https:\/\/js.stripe.com<\/code>, <code>https:\/\/fonts.gstatic.com<\/code>). These are included only as a default starting point to prevent checkout from breaking when you first enable the CSP feature. No data is transmitted by this plugin to those domains \u2014 the browser uses the CSP header to decide which external resources to load, independently of this plugin.<\/p>\n\n<p>If your store does not use PayPal or Stripe, you can remove those origins via the Custom CSP Directives field in Settings.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>toply-skimshield<\/code> folder to the <code>\/wp-content\/plugins\/<\/code> directory, or install directly through the WordPress plugin screen<\/li>\n<li>Activate the plugin through the 'Plugins' screen in WordPress<\/li>\n<li>Navigate to <strong>SkimShield<\/strong> in the WordPress admin sidebar menu<\/li>\n<li>Click <strong>Scan Now<\/strong> on the Dashboard tab to detect and register all current checkout scripts<\/li>\n<li>Go to the <strong>Script Whitelist<\/strong> tab \u2014 review the detected scripts and click <strong>Approve<\/strong> on each one you recognise<\/li>\n<li>Optionally enable CSP in <strong>Settings<\/strong> starting with Report-Only mode, then switch to Enforce after 48 hours<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"will%20this%20break%20my%20checkout%3F\"><h3>Will this break my checkout?<\/h3><\/dt>\n<dd><p>No. The monitoring is passive \u2014 it reads scripts, doesn't modify them. The CSP feature starts in Report-Only mode by default (scripts are not blocked, only logged), giving you time to whitelist all legitimate scripts before enforcing.<\/p><\/dd>\n<dt id=\"does%20it%20require%20any%20api%20key%20or%20external%20account%3F\"><h3>Does it require any API key or external account?<\/h3><\/dt>\n<dd><p>No. The plugin runs entirely on your WordPress server. No API keys, no external services.<\/p><\/dd>\n<dt id=\"what%20happens%20when%20a%20legitimate%20plugin%20update%20changes%20a%20script%3F\"><h3>What happens when a legitimate plugin update changes a script?<\/h3><\/dt>\n<dd><p>The plugin detects the hash change and alerts you. You simply review the change (which you would expect after a plugin update), confirm it is legitimate, and approve the new hash. The system learns your updated baseline.<\/p><\/dd>\n<dt id=\"does%20it%20support%20inline%20scripts%3F\"><h3>Does it support inline scripts?<\/h3><\/dt>\n<dd><p>Yes. The scheduled scan (hourly by default) fetches the checkout page HTML and extracts both external script sources and inline script content, hashing each one.<\/p><\/dd>\n<dt id=\"how%20does%20it%20send%20alerts%3F\"><h3>How does it send alerts?<\/h3><\/dt>\n<dd><p>Via wp_mail() \u2014 the standard WordPress email system. No SMTP configuration is required beyond what your WordPress installation already has.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20stripe%2C%20paypal%2C%20and%20other%20gateways%3F\"><h3>Is it compatible with Stripe, PayPal, and other gateways?<\/h3><\/dt>\n<dd><p>Yes. The plugin monitors all scripts on the checkout page regardless of which payment gateway you use. Popular payment gateway scripts (Stripe.js, PayPal SDK) will be detected on first scan and added to the whitelist for your approval.<\/p><\/dd>\n<dt id=\"nothing%20appears%20in%20the%20script%20whitelist%20after%20scanning%20%E2%80%94%20why%3F\"><h3>Nothing appears in the Script Whitelist after scanning \u2014 why?<\/h3><\/dt>\n<dd><p>The manual scan fetches the checkout page via <code>wp_remote_get()<\/code>. Make sure:\n- WooCommerce is active and a <code>\/checkout\/<\/code> page exists\n- The checkout page is publicly accessible (not behind a password or maintenance mode)\n- Your server can make outgoing HTTP requests to itself (loopback connections are enabled)<\/p>\n\n<p>You can verify loopback connectivity from <strong>Tools \u2192 Site Health \u2192 Info \u2192 WordPress Constants<\/strong> \u2014 <code>WP_HTTP_BLOCK_EXTERNAL<\/code> should not be set to <code>true<\/code>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.4<\/h4>\n\n<ul>\n<li>Fix: Script source column now wraps to show the full path instead of truncating with ellipsis<\/li>\n<\/ul>\n\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Fix: Incidents badge and security alert now show only unresolved incidents (previously counted resolved incidents too)<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Add: Bulk \"Resolve Selected\" with checkboxes on the Incidents tab<\/li>\n<li>Add: \"Resolve All\" button to resolve all open incidents at once<\/li>\n<li>Add: Bulk \"Approve Selected\" with checkboxes on the Script Whitelist tab<\/li>\n<li>Add: \"Approve All Pending\" button to approve all pending scripts at once<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Fix: Incidents tab showed \"No incidents recorded\" even when incidents existed (variable name mismatch in admin controller)<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release<\/li>\n<li>Script hash monitoring via WordPress hooks and scheduled scans<\/li>\n<li>Content Security Policy header generation and management<\/li>\n<li>Script whitelist with approve\/block\/delete actions<\/li>\n<li>Instant email alerts via wp_mail()<\/li>\n<li>PCI-DSS v4.0 compliance report (requirements 6.4.3, 12.10)<\/li>\n<li>Incident log with severity levels and resolution tracking<\/li>\n<\/ul>","raw_excerpt":"Real-time script integrity monitoring and CSP automation for WooCommerce checkout. No API dependencies. Detects unauthorized scripts on checkout.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/309518","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=309518"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/toply"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=309518"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=309518"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=309518"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=309518"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=309518"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=309518"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}