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 |
|---|---|---|---|---|---|---|---|---|
| #1551 | Easy Photo Album | 37 | 360 | 43 | 1k+ | Text Domain Mismatch | ||
| #1552 | Pricing Table WordPress Plugin – Easy Pricing Tables | 37 | 332 | 161 | 10k+ | Output is not escaped | ||
| #1553 | Easy Profile Widget | 37 | 157 | 20 | 400 | Output is not escaped | ||
| #1554 | EasyMe Connect | 37 | 130 | 45 | 500 | Text Domain Mismatch | ||
| #1555 | Eazy CF Captcha | 37 | 93 | 54 | 500 | Text Domain Mismatch | ||
| #1556 | WP eBay Product Feeds | 37 | 136 | 31 | 700 | Output is not escaped | ||
| #1557 | Excerpt Editor | 37 | 170 | 142 | 500 | Unsafe printing function | ||
| #1558 | Gmail SMTP | 37 | 85 | 71 | 10k+ | Unsafe printing function | ||
| #1559 | GoCache | 37 | 273 | 43 | 900 | Non Singular String Literal Domain | ||
| #1560 | GoPay for WooCommerce | 37 | 66 | 103 | 1k+ | Non-prefixed global variable | ||
| #1561 | GS Portfolio for Envato | 37 | 155 | 75 | 4k+ | Text Domain Mismatch | ||
| #1562 | Gutena Forms – Contact Form, Survey Form, Feedback Form, Booking Form, and Custom Form Builder | 37 | 83 | 113 | 20k+ | SQL query is not prepared | ||
| #1563 | Hash Elements | 37 | 147 | 92 | 5k+ | Output is not escaped | ||
| #1564 | Horizontal scrolling announcements | 37 | 215 | 140 | 8k+ | Output is not escaped | ||
| #1565 | .htaccess Site Access Control | 37 | 54 | 67 | 800 | Input is not sanitized | ||
| #1566 | Humans TXT | 37 | 159 | 86 | 400 | Output is not escaped | ||
| #1567 | Image Optimizer by 10web – Image Optimizer and Compression plugin | 37 | 244 | 45 | 3k+ | Text Domain Mismatch | ||
| #1568 | Image Widget Deluxe | 37 | 190 | 1 | 1k+ | Output is not escaped | ||
| #1569 | Injection Guard | 37 | 86 | 45 | 1k+ | Unsafe printing function | ||
| #1570 | Job Manager & Career – Manage job board listings, and recruitments | 37 | 112 | 205 | 2k+ | Missing nonce verification | ||
| #1571 | JVM Rich Text Icons | 37 | 87 | 34 | 3k+ | Output is not escaped | ||
| #1572 | Language Switcher | 37 | 81 | 105 | 1k+ | Missing Translators Comment | ||
| #1573 | LearnPress – Course Review | 37 | 67 | 43 | 20k+ | Output is not escaped | ||
| #1574 | LH Archived Post Status | 37 | 150 | 64 | 3k+ | Text Domain Mismatch | ||
| #1575 | List category posts | 37 | 161 | 17 | 80k+ | Output is not escaped | ||
| #1576 | LiveJournal Importer | 37 | 86 | 67 | 8k+ | Output is not escaped | ||
| #1577 | Localendar Calendar for WordPress | 37 | 241 | 6 | 400 | Output is not escaped | ||
| #1578 | Maintenance Page | 37 | 62 | 33 | 3k+ | Output is not escaped | ||
| #1579 | Max Mega Menu | 37 | 249 | 174 | 300k+ | Output is not escaped | ||
| #1580 | Metorik – Reports & Email Automation for WooCommerce | 37 | 75 | 70 | 10k+ | Output is not escaped | ||
| #1581 | CrawlWP SEO – Instant Search Engine Indexing & SEO Performance Monitor | 37 | 47 | 90 | 40k+ | Dynamic hook name | ||
| #1582 | My Post Order | 37 | 100 | 114 | 400 | Output is not escaped | ||
| #1583 | news ticker benaceur | 37 | 1,097 | 31 | 1k+ | Output is not escaped | ||
| #1584 | Optin Forms – Simple List Building Plugin for WordPress | 37 | 647 | 22 | 3k+ | Output is not escaped | ||
| #1585 | WP All Export – Order Export for WooCommerce | 37 | 109 | 111 | 4k+ | Text Domain Mismatch | ||
| #1586 | OSM – OpenStreetMap | 37 | 130 | 64 | 10k+ | Output is not escaped | ||
| #1587 | Page scroll to id | 37 | 38 | 120 | 100k+ | Missing nonce verification | ||
| #1588 | GoHero Store Customizer for WooCommerce | 37 | 75 | 53 | 600 | Unsafe printing function | ||
| #1589 | Phoenix Media Rename | 37 | 180 | 104 | 50k+ | Output is not escaped | ||
| #1590 | PNG to JPG | 37 | 130 | 173 | 10k+ | Interpolated SQL is not prepared | ||
| #1591 | Post Terms Order – per Post based | 37 | 70 | 36 | 2k+ | Output is not escaped | ||
| #1592 | Product Image Hover Effects WOOC – WPSHARE247 | 37 | 161 | 94 | 800 | Output is not escaped | ||
| #1593 | Publish to Schedule | 37 | 195 | 43 | 3k+ | Text Domain Mismatch | ||
| #1594 | PublishPress Statuses – Custom Post Status and Workflow | 37 | 231 | 78 | 1k+ | Missing Arg Domain | ||
| #1595 | rapidmail: Newsletter & E-Mail Marketing for WooCommerce | 37 | 79 | 47 | 400 | Text Domain Mismatch | ||
| #1596 | resmio button & widget | 37 | 99 | 36 | 400 | Text Domain Mismatch | ||
| #1597 | Reusable Content Blocks | 37 | 349 | 14 | 4k+ | Text Domain Mismatch | ||
| #1598 | Robots & Sitemap | 37 | 199 | 28 | 500 | Text Domain Mismatch | ||
| #1599 | RSS for Yandex Zen | 37 | 240 | 100 | 4k+ | Unsafe printing function | ||
| #1600 | RSS Image Feed | 37 | 147 | 16 | 2k+ | Output is not escaped |