WP Manifestindependent plugin directory
manifest / editor / accessible-content

Accessible Content WP Registry grade D+. High-severity findings · 2 findingsWP RegistryHigh-severity findings · 2 findingsOpen the reportD+

Accessibility checker for content inside WordPress.

★ 34stars
1.0.1latest · 6 years ago

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/campuspress/accessible-content/archive/refs/heads/master.zip
Updates itself. It ships its own updater (Plugin Update Checker), so new versions appear under Dashboard → Updates.

Accessible Content Plugin

Adds an Accessibilty Checker to the WordPress page/post preview. The checker identifies potential accessibility issues and provides guidance on host to improve.

Features

  • Augmented content preview with accessibility analysis and tips.
  • Extended block editor core image element, to include decorative image toggle.
  • A new page in Media admin area with editable fields for default media element alt attributes and their decorative flags.
  • Optional augmented content filtering to ensure default alt attributes text gets added to legacy images (see Settings > Accessibility).

Development, packaging and release

See scripts section in package.json

Releases

2 releases.

Tag
Published
1.0.1 latest
May 21, 2020 6 years ago
v1
May 13, 2020 6 years ago

These releases are tags only. The author does not attach a packaged zip, so there are no download counts to report.

D+ grade

Security

Accessible Content 1.0.1 · audited by WP Registry

High-severity findings.

1 high 1 medium
Audited release
1.0.1
Findings
2
Worst severity
high
Content hash
5243a5be43162f9aa00b7aec…

Findings

  • high Stored XSS via unique id values interpolated into the Accessibility Review innerHTML overlay

    xss_stored

    On post preview for anyone with edit_post, campus-a11y.js scans [id] nodes and, when an id is duplicated, stores the raw id string as unique_ids message data. getMessageString/expand substitutes that value into the localized unique_ids title (placeholder ###id###). getMsgsMarkup then assigns the result to m.innerHTML. innerHTML will execute event-handler markup such as <img src=x onerror=...>, and render() auto-opens the first issue popup ~100ms after parse. WordPress kses allows the id attribute on post tags for Contributor (no unfiltered_html); the attribute value is not executable in the post body, but this overlay promotes it into HTML. A Contributor (or Author on multisite) can plant two elements with a crafted duplicate id, then induce an Editor/Admin to click Accessibility Review — script runs in that privileged session. Contrast fg/bg interpolations are hex from getComputedStyle and are not this bug.

    assets/src/js/preview/render.js:93-107

    Recommendation

    HTML-escape all interpolated issue data (id, and any future placeholders) before innerHTML, or build the dialog with textContent/DOM APIs. Treat unique_ids as text, not markup. Do not auto-open a popup whose body includes unsanitized DOM-derived strings.

  • medium CSRF on alt, decorative-flag, and ignore AJAX (capability checked, nonce absent)

    csrf

    wp_ajax_campus_a11y_ignore, campus_a11y_update_alt, campus_a11y_update_decorative, and campus_a11y_update_decorative_url all read stripslashes_deep($_POST), gate only on current_user_can('edit_post', $post_id), and then update_post_meta (_wp_attachment_image_alt, _campus_a11y_decorative_image, or campus_a11y_ignores). No check_ajax_referer/wp_verify_nonce. wp_localize_script data for campus_a11y_insights includes ajax URL and post.id but no nonce; assets/src/js/request.js and assets/src/js/admin.js POST action/post_id/alt without one. An Author/Editor/Admin who can edit the target can be CSRF'd into changing site-wide image alts (editors/admins), marking attachments decorative, or rewriting ignore maps. Alt is sanitize_text_field so this is not XSS; consumer is core attachment alt plus optional the_content replacement. Settings save is a separate path and does verify Nonce::ACTION_SETTINGS under manage_options.

    src/Campus/A11y/Controller/class-ajax.php:16-143

    Recommendation

    Create a nonce in Assets::get_data(), send it from request.js and admin.js, and call check_ajax_referer in every Ajax method before any update_post_meta. Keep the edit_post checks.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.