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 |
|---|---|---|---|---|---|---|---|---|
| #2901 | Feed Post Thumbnail | 78 | 9 | 3 | 2k+ | Unsafe printing function | ||
| #2902 | Grabber for QQWorld Auto Save Images | 79 | 17 | 3 | 500 | Non Singular String Literal Domain | ||
| #2903 | JSON API Auth | 79 | 5 | 11 | 700 | Non-prefixed function | ||
| #2904 | Last Name First Name | 79 | 9 | 5 | 500 | Non-prefixed function | ||
| #2905 | Weight/Country Shipping for WooCommerce | 79 | 10 | 2 | 900 | Unsafe printing function | ||
| #2906 | Responsive Mobile-Friendly Tooltip | 79 | 25 | 14 | 600 | Missing Arg Domain | ||
| #2907 | Visual Editor Biography | 79 | 11 | 3 | 900 | Missing Arg Domain | ||
| #2908 | WP Automatic Updates | 79 | 50 | 7 | 400 | Text Domain Mismatch | ||
| #2909 | WP Updates Settings | 79 | 7 | 8 | 900 | Unsafe printing function | ||
| #2910 | Яндекс Метрика | 79 | 10 | 4 | 10k+ | Unsafe printing function | ||
| #2911 | YITH Maintenance Mode | 79 | 19 | 63 | 5k+ | Non-prefixed global variable | ||
| #2912 | Fix Another Update In Progress | 80 | 7 | 1 | 8k+ | Output is not escaped | ||
| #2913 | Headless Mode | 80 | 7 | 0 | 2k+ | Unsafe printing function | ||
| #2914 | Ocean Custom Sidebar | 80 | 8 | 3 | 20k+ | Missing Arg Domain | ||
| #2915 | Oomph Hidden Tags | 80 | 13 | 2 | 400 | Missing Arg Domain | ||
| #2916 | Auto Post Expiration | 81 | 12 | 4 | 800 | Text Domain Mismatch | ||
| #2917 | Cf7 Icons and Labels | 81 | 16 | 4 | 500 | Text Domain Mismatch | ||
| #2918 | CHL-Change HTML Lang | 81 | 5 | 7 | 7k+ | Non-prefixed function | ||
| #2919 | Custom Login Css | 81 | 10 | 0 | 400 | Missing direct file access protection | ||
| #2920 | Fullwidth Templates for Any Theme & Page Builder | 81 | 12 | 23 | 20k+ | Non-prefixed constant | ||
| #2921 | MM Title Manager — Hide Page and Post Title | 81 | 4 | 4 | 9k+ | Unsafe printing function | ||
| #2922 | Max Mega Menu – StoreFront Integration | 81 | 12 | 2 | 2k+ | Text Domain Mismatch | ||
| #2923 | Page Excerpt | 81 | 11 | 1 | 3k+ | Missing Arg Domain | ||
| #2924 | QuadMenu – Astra Mega Menu | 81 | 10 | 2 | 600 | Text Domain Mismatch | ||
| #2925 | Require Login | 81 | 9 | 12 | 500 | Non-prefixed function | ||
| #2926 | ACF Multi Dates Field | 82 | 6 | 8 | 1k+ | Not In Footer | ||
| #2927 | Awin Publisher MasterTag | 82 | 6 | 6 | 1k+ | Non-prefixed global variable | ||
| #2928 | Multiple Form Instances Add-on for Gravity Forms | 82 | 5 | 5 | 800 | Missing direct file access protection | ||
| #2929 | Preferred Languages | 82 | 3 | 6 | 2k+ | Input is not sanitized | ||
| #2930 | Stop Emails | 82 | 9 | 3 | 5k+ | Missing direct file access protection | ||
| #2931 | Visual Term Description Editor | 82 | 11 | 5 | 10k+ | Missing Arg Domain | ||
| #2932 | WC Multiple Email Recipients | 82 | 6 | 3 | 4k+ | trademarked term | ||
| #2933 | Optimize Images Resizing | 83 | 12 | 4 | 6k+ | Unsafe printing function | ||
| #2934 | Photospace Responsive Gallery | 83 | 115 | 14 | 900 | Text Domain Mismatch | ||
| #2935 | Post Meta Inspector | 83 | 6 | 1 | 2k+ | Unsafe printing function | ||
| #2936 | Upload Url and Path Enabler | 83 | 10 | 1 | 2k+ | Missing Arg Domain | ||
| #2937 | Floating Publish Button | 84 | 5 | 4 | 1k+ | Unsafe printing function | ||
| #2938 | Public Post Preview Configurator | 84 | 14 | 6 | 10k+ | Non Singular String Literal Domain | ||
| #2939 | ACF Nav Menu Field | 85 | 16 | 6 | 2k+ | Text Domain Mismatch | ||
| #2940 | ACF YouTube Picker | 85 | 82 | 7 | 400 | Text Domain Mismatch | ||
| #2941 | Advanced Custom Fields: Nav Menu Field | 85 | 27 | 6 | 8k+ | Missing Arg Domain | ||
| #2942 | Stock market charts from finviz | 85 | 8 | 1 | 400 | Missing Arg Domain | ||
| #2943 | Free Shipping Per Product for WooCommerce | 85 | 21 | 3 | 3k+ | Text Domain Mismatch | ||
| #2944 | WP Revisions Control | 85 | 9 | 6 | 40k+ | wp function not compatible with requires wp | ||
| #2945 | BNE Gallery Extended | 86 | 8 | 0 | 1k+ | Unsafe printing function | ||
| #2946 | Custom Content Width | 86 | 8 | 0 | 1k+ | Text Domain Mismatch | ||
| #2947 | Heroic Glossary – Block for building Glossaries, Dictionaries and more | 86 | 8 | 7 | 3k+ | Text Domain Mismatch | ||
| #2948 | PageView | 86 | 17 | 2 | 1k+ | wp function not compatible with requires wp | ||
| #2949 | Taxonomy TinyMCE | 86 | 10 | 1 | 900 | Unsafe printing function | ||
| #2950 | Sold Individually for WooCommerce Product Variations | 86 | 2 | 6 | 800 | Missing nonce verification |