Do not use JSON_UNESCAPED_SLASHES in format_json_encode() since it may be unsafe in HTML context
#22913
+6
−6
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Using
JSON_UNESCAPED_SLASHESwhen embedding JSON inside a<script>tag is unsafe because it allows unescaped</script>sequences to appear in the output. HTML parsers terminate<script>tags before JavaScript parsing, even if the sequence appears inside a string literal. This can lead to XSS if any JSON value is user-controlled. The default escaping injson_encode()prevents this and should not be disabled in this context.While this does not appear to be an issue in the plugin’s default setup, the schema can be altered by filters, and the current JSON encoding settings are a major footgun that can lead to security issues if misused.
Steps to reproduce:
Note that
https://example.com/?s=</script>is a perfectly valid URL, but</script>in the URL prematurely closes the<script>tag.