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 |
|---|---|---|---|---|---|---|---|---|
| #1901 | Serial Number for Contact Form 7 | 39 | 105 | 53 | 2k+ | Non Singular String Literal Domain | ||
| #1902 | Taxonomy Thumbnail | 39 | 27 | 58 | 3k+ | Non-prefixed function | ||
| #1903 | Shipping by Rules for WooCommerce | 39 | 130 | 48 | 500 | Output is not escaped | ||
| #1904 | Show All Comments | 39 | 108 | 92 | 400 | Nonce verification recommended | ||
| #1905 | Simple Membership WP user Import | 39 | 22 | 46 | 4k+ | Request data is not unslashed | ||
| #1906 | Simple Posts Ticker – Easy, Lightweight & Flexible | 39 | 151 | 28 | 2k+ | Output is not escaped | ||
| #1907 | SimpleModal Login | 39 | 50 | 12 | 700 | Unsafe printing function | ||
| #1908 | Slider Text Scroll | 39 | 95 | 52 | 400 | Text Domain Mismatch | ||
| #1909 | SMTP | 39 | 54 | 15 | 700 | Non Singular String Literal Domain | ||
| #1910 | Soumettre.fr | 39 | 130 | 26 | 10k+ | Text Domain Mismatch | ||
| #1911 | Stock Ticker | 39 | 92 | 49 | 2k+ | Output is not escaped | ||
| #1912 | Stockdio Historical Chart | 39 | 65 | 16 | 800 | Output is not escaped | ||
| #1913 | Substack Importer | 39 | 33 | 33 | 1k+ | Missing nonce verification | ||
| #1914 | Swifty Image Widget | 39 | 114 | 28 | 900 | Output is not escaped | ||
| #1915 | Sydney Toolbox | 39 | 84 | 62 | 50k+ | Unsafe printing function | ||
| #1916 | Sync Post With Other Site | 39 | 179 | 21 | 3k+ | Non Singular String Literal Domain | ||
| #1917 | Tabify Edit Screen | 39 | 83 | 27 | 500 | Output is not escaped | ||
| #1918 | Easy Category Icons | 39 | 50 | 43 | 600 | Text Domain Mismatch | ||
| #1919 | OpenHook | 39 | 172 | 22 | 1k+ | Unsafe printing function | ||
| #1920 | TinyMCE Custom Styles | 39 | 297 | 76 | 7k+ | Non Singular String Literal Domain | ||
| #1921 | TinyMCE Spellcheck | 39 | 27 | 32 | 2k+ | Unsafe printing function | ||
| #1922 | TomS reCAPTCHA | 39 | 128 | 256 | 500 | Missing nonce verification | ||
| #1923 | Ultimate Client Dash | 39 | 697 | 12 | 2k+ | Text Domain Mismatch | ||
| #1924 | Ultimate Lightbox | 39 | 110 | 59 | 1k+ | Unsafe printing function | ||
| #1925 | Universal Google Adsense and Ads manager | 39 | 70 | 31 | 2k+ | Unsafe printing function | ||
| #1926 | upPrev | 39 | 35 | 36 | 1k+ | Dynamic hook name | ||
| #1927 | UserHeat Plugin | 39 | 121 | 20 | 6k+ | Non Singular String Literal Domain | ||
| #1928 | Accessibility by UserWay | 39 | 22 | 35 | 80k+ | Direct Query | ||
| #1929 | BeGateway Payment Gateway for WooCommerce | 39 | 57 | 44 | 400 | Unsafe printing function | ||
| #1930 | Wicked Folders – Folder Organizer for Pages, Posts, and Custom Post Types | 39 | 89 | 117 | 20k+ | Unsafe printing function | ||
| #1931 | Claudio Sanches – PagSeguro for WooCommerce | 39 | 87 | 37 | 10k+ | Unsafe printing function | ||
| #1932 | WooCommerce Product Dependencies | 39 | 44 | 60 | 3k+ | Missing nonce verification | ||
| #1933 | Store Toolkit – WooCommerce Extensions, Quick Enhancements & Handy Tools | 39 | 322 | 66 | 8k+ | Output is not escaped | ||
| #1934 | WP Accessibility | 39 | 200 | 104 | 60k+ | Unsafe printing function | ||
| #1935 | Aparat for WordPress | 39 | 59 | 14 | 3k+ | Output is not escaped | ||
| #1936 | WP Attachments | 39 | 49 | 44 | 3k+ | Output is not escaped | ||
| #1937 | WP-Cycle | 39 | 53 | 17 | 3k+ | Output is not escaped | ||
| #1938 | WP Gmail SMTP | 39 | 99 | 50 | 1k+ | Text Domain Mismatch | ||
| #1939 | WP Performance Score Booster – Optimize Speed, Enable Cache & Page Preload | 39 | 59 | 27 | 10k+ | Unsafe printing function | ||
| #1940 | WP Realtime Sitemap | 39 | 46 | 41 | 10k+ | Output is not escaped | ||
| #1941 | WP Revision Master | 39 | 96 | 29 | 900 | Text Domain Mismatch | ||
| #1942 | WP SendGrid SMTP | 39 | 99 | 50 | 1k+ | Text Domain Mismatch | ||
| #1943 | WP Sitemap Control | 39 | 31 | 37 | 400 | Output is not escaped | ||
| #1944 | WP-Slimbox2 Plugin | 39 | 77 | 19 | 3k+ | Unsafe printing function | ||
| #1945 | WP Social Widget | 39 | 239 | 7 | 4k+ | Output is not escaped | ||
| #1946 | SEO Auto Linker | 39 | 97 | 62 | 3k+ | Unsafe printing function | ||
| #1947 | Categories to Tags Converter | 39 | 86 | 38 | 50k+ | Output is not escaped | ||
| #1948 | WPS Child Theme Generator | 39 | 111 | 85 | 6k+ | Unsafe printing function | ||
| #1949 | WPS Limit Login | 39 | 152 | 76 | 100k+ | Output is not escaped | ||
| #1950 | Yandex Metrica | 39 | 92 | 46 | 20k+ | Output is not escaped |