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 |
|---|---|---|---|---|---|---|---|---|
| #1501 | Disable Payment Methods based on cart conditions for WooCommerce | 36 | 158 | 57 | 1k+ | Non Singular String Literal Domain | ||
| #1502 | Guaranteed Reviews Company (Société des Avis Garantis) | 36 | 369 | 197 | 1k+ | Output is not escaped | ||
| #1503 | Extended Coupon Features for WooCommerce FREE | 36 | 219 | 63 | 10k+ | Text Domain Mismatch | ||
| #1504 | CatalogX – Catalog Mode, Enquiry & Quotes for WooCommerce | 36 | 165 | 69 | 5k+ | Text Domain Mismatch | ||
| #1505 | WP-Cleanup | 36 | 79 | 29 | 400 | Output is not escaped | ||
| #1506 | WP-EMail | 36 | 340 | 95 | 1k+ | Unsafe printing function | ||
| #1507 | WP Header Images | 36 | 174 | 133 | 6k+ | Unsafe printing function | ||
| #1508 | WP Hotel Booking WooCommerce | 36 | 93 | 99 | 1k+ | Output is not escaped | ||
| #1509 | WP LaTeX | 36 | 103 | 12 | 700 | Output is not escaped | ||
| #1510 | WP Mail | 36 | 202 | 201 | 500 | Output is not escaped | ||
| #1511 | Payment Button for PayPal | 36 | 155 | 86 | 4k+ | Unsafe printing function | ||
| #1512 | WP Publication Archive | 36 | 197 | 64 | 400 | Text Domain Mismatch | ||
| #1513 | WP Responsive Menu | 36 | 295 | 139 | 30k+ | Text Domain Mismatch | ||
| #1514 | WP Hardening (discontinued) | 36 | 230 | 85 | 10k+ | Text Domain Mismatch | ||
| #1515 | WP Show Posts | 36 | 107 | 102 | 70k+ | Output is not escaped | ||
| #1516 | WP Sort Order | 36 | 134 | 211 | 6k+ | Direct Query | ||
| #1517 | WP Stripe Checkout | 36 | 198 | 118 | 1k+ | Unsafe printing function | ||
| #1518 | Yandex.Metrica | 36 | 76 | 30 | 60k+ | Output is not escaped | ||
| #1519 | WPAvatar | 36 | 425 | 45 | 700 | Unsafe printing function | ||
| #1520 | WPLMS H5P | 36 | 111 | 106 | 1k+ | Text Domain Mismatch | ||
| #1521 | Database Snapshots – WPvivid | 36 | 66 | 108 | 1k+ | Direct Query | ||
| #1522 | Custom Product Tabs for WooCommerce | 36 | 87 | 81 | 80k+ | Output is not escaped | ||
| #1523 | 360 Javascript Viewer | 37 | 144 | 22 | 1k+ | Output is not escaped | ||
| #1524 | ACF: TablePress | 37 | 160 | 45 | 1k+ | Text Domain Mismatch | ||
| #1525 | Add From Server | 37 | 52 | 20 | 60k+ | Output is not escaped | ||
| #1526 | AddToAny Share Buttons | 37 | 123 | 164 | 300k+ | Unsafe printing function | ||
| #1527 | Advanced Custom Fields: NextGEN Gallery Field add-on | 37 | 131 | 20 | 400 | Output is not escaped | ||
| #1528 | Agreeable | 37 | 40 | 67 | 800 | Unsafe printing function | ||
| #1529 | Analytics Spam Blocker | 37 | 76 | 22 | 800 | Unsafe printing function | ||
| #1530 | Anything Popup | 37 | 164 | 185 | 2k+ | Non-prefixed global variable | ||
| #1531 | Async JavaScript | 37 | 357 | 79 | 70k+ | Unsafe printing function | ||
| #1532 | Async JS and CSS | 37 | 90 | 1 | 700 | Text Domain Mismatch | ||
| #1533 | AZAN Plugin | 37 | 44 | 30 | 500 | Output is not escaped | ||
| #1534 | Banhammer – Monitor Site Traffic, Block Bad Users and Bots | 37 | 104 | 174 | 1k+ | Output is not escaped | ||
| #1535 | Bellows Accordion Menu | 37 | 160 | 28 | 10k+ | Text Domain Mismatch | ||
| #1536 | Better Click To Share – Shareable Quote Boxes for X (Twitter) | 37 | 170 | 59 | 6k+ | Unsafe printing function | ||
| #1537 | Blimply | 37 | 172 | 43 | 800 | Text Domain Mismatch | ||
| #1538 | BuddyPress Members Only | 37 | 184 | 80 | 1k+ | Text Domain Mismatch | ||
| #1539 | Contact Zalo Report SW | 37 | 44 | 39 | 900 | Missing Arg Domain | ||
| #1540 | Catalog Booster & Product Catalog Mode for WooCommerce | 37 | 106 | 168 | 1k+ | Non-prefixed function | ||
| #1541 | Checkout for PayPal | 37 | 134 | 67 | 600 | Unsafe printing function | ||
| #1542 | Clearpay Gateway for WooCommerce | 37 | 185 | 63 | 1k+ | Text Domain Mismatch | ||
| #1543 | CodePeople Post Map for Google Maps | 37 | 257 | 31 | 3k+ | Unsafe printing function | ||
| #1544 | Lightweight Subscribe To Comments | 37 | 105 | 70 | 1k+ | Unsafe printing function | ||
| #1545 | Constant Contact Forms by MailMunch | 37 | 147 | 53 | 2k+ | wp function not compatible with requires wp | ||
| #1546 | Crafty Social Buttons | 37 | 279 | 27 | 900 | Non Singular String Literal Domain | ||
| #1547 | Ultimate Custom Add To Cart Button (Ajax) For WooCommerce by Binary Carpenter | 37 | 151 | 61 | 600 | Output is not escaped | ||
| #1548 | Simple Custom CSS and JS | 37 | 168 | 69 | 600k+ | Output is not escaped | ||
| #1549 | Custom Post Template | 37 | 48 | 30 | 10k+ | Output is not escaped | ||
| #1550 | DSGVO/GDPR Cookies, DSE, Impressum & Google Fonts Proxy | 37 | 391 | 25 | 700 | Text Domain Mismatch |