Skip to content

Security: Use aria-controls attribute with safe $( '#' + id ) selector pattern avoiding unsafe use of href#12579

Open
SainathPoojary wants to merge 3 commits into
WordPress:trunkfrom
SainathPoojary:fix/65574
Open

Security: Use aria-controls attribute with safe $( '#' + id ) selector pattern avoiding unsafe use of href#12579
SainathPoojary wants to merge 3 commits into
WordPress:trunkfrom
SainathPoojary:fix/65574

Conversation

@SainathPoojary

Copy link
Copy Markdown

The contextual help tab click handler passed the raw href attribute to jQuery's $(), which accepts both CSS selectors and raw HTML.

Fix: Use aria-controls with the $( '#' + id ) pattern, the same convention used elsewhere in the same file and across admin JS (privacy-tools.js, site-health.js).

Trac ticket: #65574

@github-actions

Copy link
Copy Markdown

Test using WordPress Playground

The changes in this pull request can previewed and tested using a WordPress Playground instance.

WordPress Playground is an experimental project that creates a full WordPress instance entirely within the browser.

Some things to be aware of

  • All changes will be lost when closing a tab with a Playground instance.
  • All changes will be lost when refreshing the page.
  • A fresh instance is created each time the link below is clicked.
  • Every time this pull request is updated, a new ZIP file containing all changes is created. If changes are not reflected in the Playground instance,
    it's possible that the most recent build failed, or has not completed. Check the list of workflow runs to be sure.

For more details about these limitations and more, check out the Limitations page in the WordPress Playground documentation.

Test this pull request with WordPress Playground.

@SainathPoojary
SainathPoojary marked this pull request as ready for review July 20, 2026 16:18
@github-actions

Copy link
Copy Markdown

The following accounts have interacted with this PR and/or linked issues. I will continue to update these lists as activity occurs. You can also manually ask me to refresh this list by adding the props-bot label.

Core Committers: Use this line as a base for the props when committing in SVN:

Props sainathpoojary.

To understand the WordPress project's expectations around crediting contributors, please review the Contributor Attribution page in the Core Handbook.

Copilot AI review requested due to automatic review settings July 22, 2026 12:58

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR hardens the admin contextual help tab click handler by avoiding passing a raw href value into jQuery’s $() constructor, reducing the risk of selector/HTML interpretation issues and aligning tab targeting with the aria-controls pattern used for other admin UI toggles.

Changes:

  • Switches help-tab panel resolution from $( link.attr( 'href' ) ) to resolving the panel via the tab’s aria-controls target ID.
  • Uses DOM lookup (document.getElementById) as an input to jQuery to avoid jQuery parsing potentially unsafe strings.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread src/js/_enqueues/admin/common.js Outdated
Copilot AI review requested due to automatic review settings July 22, 2026 13:04

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 1 out of 1 changed files in this pull request and generated no new comments.

Comments suppressed due to low confidence (1)

src/js/_enqueues/admin/common.js:699

  • The active tab CSS classes are updated before verifying that the target panel exists. If aria-controls is missing/invalid (or the panel is absent for any reason), the handler returns early leaving the previous panel visible while marking a different tab as active. Consider resolving the panel first, returning early if not found, and only then updating the tab/panel state.
	$('.contextual-help-tabs .active').removeClass('active');
	link.parent('li').addClass('active');

	panel = $( document.getElementById( link.attr( 'aria-controls' ) || '' ) );

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants