Make WordPress Core


Ignore:
Timestamp:
08/27/2025 10:32:57 AM (4 months ago)
Author:
jonsurrell
Message:

Scripts: Use appropriate JSON encoding flags for script tags.

wp_json_encode() with default arguments is insufficient to safely escape JSON for script tags. Use JSON_HEX_TAG | JSON_UNESCAPED_SLASHES flags.

Developed in https://github.com/WordPress/wordpress-develop/pull/9557.

Props devasheeshkaul, jonsurrell, siliconforks.
Fixes #63851.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/wp-includes/class-wp-customize-manager.php

    r60522 r60681  
    477477                var preview = new api.Messenger( settings.messengerArgs );
    478478                preview.send( 'iframe-loading-error', settings.error );
    479             } )( wp.customize, <?php echo wp_json_encode( $settings ); ?> );
     479            } )( wp.customize, <?php echo wp_json_encode( $settings, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ); ?> );
    480480            </script>
    481481            <?php
     
    22062206        ?>
    22072207        <script>
    2208             var _wpCustomizeSettings = <?php echo wp_json_encode( $settings ); ?>;
     2208            var _wpCustomizeSettings = <?php echo wp_json_encode( $settings, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ); ?>;
    22092209            _wpCustomizeSettings.values = {};
    22102210            (function( v ) {
     
    22192219                        printf(
    22202220                            "v[%s] = %s;\n",
    2221                             wp_json_encode( $id ),
    2222                             wp_json_encode( $setting->js_value() )
     2221                            wp_json_encode( $id, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ),
     2222                            wp_json_encode( $setting->js_value(), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES )
    22232223                        );
    22242224                    }
     
    49894989        ?>
    49904990        <script>
    4991             var _wpCustomizeSettings = <?php echo wp_json_encode( $settings ); ?>;
     4991            var _wpCustomizeSettings = <?php echo wp_json_encode( $settings, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ); ?>;
    49924992            _wpCustomizeSettings.initialClientTimestamp = _.now();
    49934993            _wpCustomizeSettings.controls = {};
     
    50015001                    printf(
    50025002                        "s[%s] = %s;\n",
    5003                         wp_json_encode( $setting->id ),
    5004                         wp_json_encode( $setting->json() )
     5003                        wp_json_encode( $setting->id, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ),
     5004                        wp_json_encode( $setting->json(), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES )
    50055005                    );
    50065006                }
     
    50145014                    printf(
    50155015                        "c[%s] = %s;\n",
    5016                         wp_json_encode( $control->id ),
    5017                         wp_json_encode( $control->json() )
     5016                        wp_json_encode( $control->id, JSON_HEX_TAG | JSON_UNESCAPED_SLASHES ),
     5017                        wp_json_encode( $control->json(), JSON_HEX_TAG | JSON_UNESCAPED_SLASHES )
    50185018                    );
    50195019                }
Note: See TracChangeset for help on using the changeset viewer.