WordPress.Security.EscapeOutput.UnsafePrintingFunction
Unsafe printing function
A printing function is outputting dynamic content without proving that the content is escaped.
Why It Shows Up
The scan saw output through functions such as `printf`, `print`, or similar constructs where the printed values were not escaped for their context.
Why It Matters
Formatted output is still browser output. If any argument contains attacker-controlled content, the page can become vulnerable to cross-site scripting.
How to Fix
- Escape every dynamic argument with `esc_html()`, `esc_attr()`, `esc_url()`, or `wp_kses()` as appropriate.
- Keep translation wrappers and escaping wrappers in the correct order, such as `esc_html__( 'Text', 'text-domain' )` for translated text.
- Avoid marking values as safe unless they are hard-coded or already strictly constrained.
References
Affected Plugins
| Rank | Plugin | Score | Errors | Warnings | Installs | Added | Updated | Top Issue |
|---|---|---|---|---|---|---|---|---|
| #2101 | Visibility Control for LearnDash | 40 | 55 | 23 | 1k+ | Missing Arg Domain | ||
| #2102 | Visibility Control for LearnPress | 40 | 52 | 19 | 700 | Missing Arg Domain | ||
| #2103 | Visual Builder for Contact Form 7 | 40 | 20 | 43 | 500 | Output is not escaped | ||
| #2104 | WP Sticky Button – Click to Chat | 40 | 73 | 64 | 10k+ | Non-prefixed global variable | ||
| #2105 | WooBooster Partial COD for WooCommerce | 40 | 90 | 51 | 500 | Text Domain Mismatch | ||
| #2106 | Where Did You Hear About Us Checkout Field for WooCommerce | 40 | 57 | 66 | 1k+ | Output is not escaped | ||
| #2107 | WC Search Orders By Product | 40 | 47 | 66 | 800 | Nonce verification recommended | ||
| #2108 | Weight Based Pricing for WooCommerce | 40 | 167 | 86 | 600 | Text Domain Mismatch | ||
| #2109 | Widget Builder | 40 | 40 | 52 | 500 | Non-prefixed global variable | ||
| #2110 | Widget Visibility Without Jetpack | 40 | 74 | 47 | 5k+ | Text Domain Mismatch | ||
| #2111 | Wonder Video Embed | 40 | 94 | 4 | 4k+ | Output is not escaped | ||
| #2112 | Preview E-mails for WooCommerce | 40 | 35 | 37 | 30k+ | Unsafe printing function | ||
| #2113 | Total Sales Counts for WooCommerce | 40 | 121 | 62 | 700 | SQL query is not prepared | ||
| #2114 | yubikey-plugin | 40 | 64 | 33 | 400 | Text Domain Mismatch | ||
| #2115 | All In One SEO Pack for WooCommerce | 40 | 57 | 25 | 3k+ | Text Domain Mismatch | ||
| #2116 | Simple Registration for WooCommerce | 40 | 27 | 55 | 4k+ | Missing nonce verification | ||
| #2117 | WooSidebars | 40 | 43 | 37 | 100k+ | Missing Translators Comment | ||
| #2118 | WP Ajax Load More Pagination and Infinite Scroll | 40 | 63 | 15 | 400 | Output is not escaped | ||
| #2119 | Custom CSS/JS | 40 | 58 | 34 | 700 | Text Domain Mismatch | ||
| #2120 | WP Discord Invite | 40 | 73 | 42 | 400 | Unsafe printing function | ||
| #2121 | Easy PayPal & Stripe Buy Now Button | 40 | 388 | 96 | 10k+ | Unsafe printing function | ||
| #2122 | WP Help | 40 | 49 | 54 | 10k+ | Unsafe printing function | ||
| #2123 | WP All Import – Job Listing Import for WP Job Manager | 40 | 35 | 27 | 2k+ | Output is not escaped | ||
| #2124 | WP Keyword Suggest | 40 | 29 | 41 | 500 | Non Singular String Literal Domain | ||
| #2125 | Media Library Categories | 40 | 29 | 49 | 20k+ | Output is not escaped | ||
| #2126 | WP Nav Plus | 40 | 95 | 13 | 1k+ | Output is not escaped | ||
| #2127 | WP Paint – WordPress Image Editor | 40 | 30 | 29 | 6k+ | Missing Arg Domain | ||
| #2128 | WP Posts Carousel | 40 | 199 | 12 | 3k+ | Unsafe printing function | ||
| #2129 | QR code MeCard/vCard generator | 40 | 322 | 21 | 2k+ | Unsafe printing function | ||
| #2130 | WP Reroute Email | 40 | 141 | 106 | 1k+ | Output is not escaped | ||
| #2131 | Social Share Buttons & Analytics Plugin – GetSocial.io | 40 | 97 | 25 | 2k+ | Output is not escaped | ||
| #2132 | WP Tab Widget | 40 | 128 | 32 | 10k+ | Output is not escaped | ||
| #2133 | WP Theme Test | 40 | 21 | 39 | 7k+ | Input is not sanitized | ||
| #2134 | WPS Menu Exporter | 40 | 47 | 22 | 10k+ | Output is not escaped | ||
| #2135 | My YouTube Channel | 40 | 54 | 38 | 5k+ | Output is not escaped | ||
| #2136 | Simple Counter | 41 | 60 | 12 | 1k+ | Unsafe printing function | ||
| #2137 | ACF: Advanced Taxonomy Selector | 41 | 56 | 15 | 1k+ | Output is not escaped | ||
| #2138 | Ad Auto Insert H | 41 | 496 | 15 | 1k+ | Non Singular String Literal Domain | ||
| #2139 | Add-on Contact Form 7 – MailPoet 3 | 41 | 88 | 12 | 3k+ | Output is not escaped | ||
| #2140 | Add Chat App Button | 41 | 82 | 12 | 2k+ | Output is not escaped | ||
| #2141 | Advance Bank Payment Transfer Gateway | 41 | 105 | 62 | 1k+ | Text Domain Mismatch | ||
| #2142 | ACF: Google Map Extended | 41 | 141 | 8 | 800 | Text Domain Mismatch | ||
| #2143 | Advanced Excerpt | 41 | 69 | 43 | 70k+ | Unsafe printing function | ||
| #2144 | AffiliateWP – Affiliate Product Rates | 41 | 84 | 24 | 2k+ | Output is not escaped | ||
| #2145 | AH Display Widgets | 41 | 52 | 16 | 8k+ | Text Domain Mismatch | ||
| #2146 | Amazon Link Engine | 41 | 38 | 17 | 2k+ | Output is not escaped | ||
| #2147 | Amazon Web Services | 41 | 53 | 21 | 5k+ | Missing Translators Comment | ||
| #2148 | Authenticator | 41 | 59 | 44 | 1k+ | Output is not escaped | ||
| #2149 | Auto Image Attributes From Filename With Bulk Updater (Add Alt Text, Image Title For Image SEO) | 41 | 175 | 26 | 100k+ | Unsafe printing function | ||
| #2150 | Avatar Manager | 41 | 29 | 41 | 5k+ | Unsafe printing function |