[wp-trac] [WordPress Trac] #58333: WordPress 6.2.1 Shortcodes some shortcode no longer works!
WordPress Trac
noreply at wordpress.org
Thu May 18 12:25:39 UTC 2023
#58333: WordPress 6.2.1 Shortcodes some shortcode no longer works!
--------------------------+-----------------------
Reporter: jorcus | Owner: (none)
Type: defect (bug) | Status: reopened
Priority: normal | Milestone: 6.2.2
Component: Shortcodes | Version: 6.2.1
Severity: normal | Resolution:
Keywords: | Focuses:
--------------------------+-----------------------
Comment (by asafm7):
Thanks, @miyarakira .
Regarding:
I like the idea of a solution that applies wptexturize, do_shortcode and
similar filters to specific blocks that need them (paragraph block,
classic block, shortcode block, heading block, etc) rather than applying
them across all blocks.
This list of blocks is incomplete and can never be made complete, as there
are many blocks made by plugins and also custom blocks, and people are
using these blocks in many ways that can't be predicted. I, for example,
use inline shortcodes inside Yoast blocks.
There should be at least a filter for determining whether a specific block
should do_shortcode() or not.
Also, I wonder if the issue can't be fixed by applying do_shortcode()
earlier, for example inside get_block_templates() or get_block_template()
Replying to [comment:59 miyarakira]:
> @la-geek Oh I see, I thought by "risk" you meant the risk of classic
themes being affected by this breaking change.
>
> > if rendered shortcodes in classic themes are still secure?
>
> The security vulnerability addressed by this change was only in block
themes, due to the way it applied content filters including `do_shortcode`
on the *entire page* after all blocks have been rendered. It meant that,
for example, shortcodes within a user-submitted comment would run even if
the user was a visitor (not logged in). Classic themes, on the other hand,
only apply `do_shortcode` to the post content which only certain user
roles can edit.
>
> ---
>
> > why a shortcode rendered in a Template PART is more secure than a
Template
>
> @audrasjb This might be an oversight since a template part can include
anything that a template can. The same set of content filters is applied
to every template part:
>
>
https://github.com/WordPress/gutenberg/blob/a0a1fd51e542b5c97f166f7be1679c2858dbb96e/packages
/block-library/src/template-part/index.php#L145-L153
>
> Notably, it runs `do_blocks` then `do_shortcode` on the result. If I
understand correctly, that means if any block renders content submitted by
non-privileged users, shortcodes within that content will be run.
>
> ---
>
> That's why I was wondering about the `core/post-content` block.
>
> Before WP 6.2.1, the function `get_the_block_template_html` (which block
themes use to render the whole page) ran `do_blocks`, which renders all
blocks on the page including the Post Content block, then applied
`do_shortcode` to the entire result HTML. This latter step was removed as
security fix in 6.2.1, but the Post Content block itself applies
`the_content` filter, which runs `do_blocks` then `do_shortcode`.
>
> As a further twist, a Post Content block can contain other Post Content
blocks, according to this comment in the pull request titled,
[https://github.com/WordPress/wordpress-
develop/pull/3549#issuecomment-1426532982 Avoid double-processing post
content when parsing block template HTML].
>
> ---
>
> This "double processing" means that the same set of content filters is
being applied more than once to the same content. It's the cause of a
number of related issues, including running shortcodes on the result of
rendering blocks ''and'' running shortcodes (which I believe is related to
the security vulnerability).
>
> - [https://github.com/WordPress/gutenberg/issues/37754
no_texturize_shortcodes WP filter broken with block themes]
> - [https://github.com/WordPress/gutenberg/issues/33813 Single quotes are
rewritten as quotes in HTML block and Shortcode blocks]
> - [https://github.com/WordPress/gutenberg/issues/49357 Shortcode
escaping with double square brackets does not work anymore in FSE themes]
>
> (This last one might have been solved in 6.2.1, since `do_shortcode` is
no longer being run twice on the same content.)
>
> To summarize, in a block theme, there are currently several places where
a very similar stack of content filters is being applied:
>
> - Default filters: `the_content`, `widget_text_content`, and
`widget_block_content` ([https://github.com/WordPress/wordpress-
develop/blob/trunk/src/wp-includes/default-filters.php here]) - all of
which applies `do_blocks` and `do_shortcode`
> - Entire page: `get_the_block_template_html`
([https://github.com/WordPress/wordpress-
develop/blob/d5792c7a8861330d53adc05dacfdfdccb822b1d4/src/wp-includes
/block-template.php#L237-L243 here]), which applies `do_blocks` ~~and
`do_shortcode`~~
> - Template part: `render_block_core_template_part`
([https://github.com/WordPress/gutenberg/blob/a0a1fd51e542b5c97f166f7be1679c2858dbb96e/packages
/block-library/src/template-part/index.php#L145-L153 here]), which applies
`do_blocks` and `do_shortcode`
> - Post Content block: `render_block_core_post_content`
([https://github.com/WordPress/gutenberg/blob/a0a1fd51e542b5c97f166f7be1679c2858dbb96e/packages
/block-library/src/template-part/index.php#L145-L153 here]), which applies
`the_content` filter ''and'' can contain nested Post Content blocks
>
> Hopefully some of this is useful in getting to the bottom of the issue.
>
> I'm invested in finding a proper solution to the above issues, as I've
struggled with them for a while. I wrote in
[https://github.com/WordPress/gutenberg/issues/37754#issuecomment-1433931297
a comment on one of the issues]:
>
> > The way it currently works, there's no way for block authors to opt-
out of these filters; the most they can do is to work around or reverse
their effects. A better design would be to ''not'' process the resulting
HTML of a block by default, except for certain blocks where `the_content`
filter makes sense. As @carlomanf said:
> >
> >> I like the idea of a solution that applies `wptexturize`,
`do_shortcode` and similar filters to specific blocks that need them
(paragraph block, classic block, shortcode block, heading block, etc)
rather than applying them across all blocks.
>
--
Ticket URL: <https://core.trac.wordpress.org/ticket/58333#comment:61>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform
More information about the wp-trac
mailing list