Skip to content

fix(security): T2.4 hardening: register PSSecurityHeadersFilter in delivery-tier webapps (issue #96) - #97

Merged
natechadwick merged 1 commit into
mainfrom
security/t2-4-security-headers-followup
Aug 28, 2026
Merged

fix(security): T2.4 hardening: register PSSecurityHeadersFilter in delivery-tier webapps (issue #96)#97
natechadwick merged 1 commit into
mainfrom
security/t2-4-security-headers-followup

Conversation

@natechadwick-intsof

Copy link
Copy Markdown
Collaborator

Summary

PR #95 added a reusable PSSecurityHeadersFilter (X-Frame-Options, X-Content-Type-Options, Referrer-Policy, HSTS, X-XSS-Protection: 0) and registered it in the two main Rhythmyx webapps (secure + non-secure). This PR extends the same defense-in-depth to the seven production delivery-tier webapps:

  • comments — user-facing comment threads
  • feeds — RSS / Atom feed endpoints
  • forms — form submission webapp
  • integrations — third-party integrations webapp
  • membership — membership profile pages
  • metadata — metadata service
  • polls — polls service

Each was previously missing the clickjacking / MIME-sniffing / referrer-leak / HSTS headers. Same <filter> + <filter-mapping> block is added to each web.xml (11 lines per file, 77 lines total). The filter class com.percussion.security.servlet.PSSecurityHeadersFilter is already on each webapp's classpath via the transitive perc-shared-appperc-security-utils dependency.

Out of scope (deliberately)

  • WebUI/war/WEB-INF/web.xml and system/ear/WEB-INF/web.xml — already have the existing PSSecurityHeaderFilter (com.percussion.utils.security.PSSecurityHeaderFilter), which is a richer filter that also handles CSP and Cache-Control. Adding the new filter there would create duplicate header writes.
  • Test resources and bundled Tomcat sample webapps — not built from source.

Verification

./mvn-env.sh clean install -DskipTests is BUILD SUCCESS for all 7 target modules (comments, feeds, forms, integrations, membership, metadata, polls). unzip -p <war> WEB-INF/web.xml | grep PSSecurityHeadersFilter returns the expected block for every built WAR.

Closes #96.

Co-Authored by Mavis v1.0.0 using minimax-m3 with agent mavis.

…livery-tier webapps (issue #96)

PR #95 added the reusable PSSecurityHeadersFilter and registered it in the
two main Rhythmyx webapps (secure + non-secure). The delivery-tier webapps
(comments, feeds, forms, integrations, membership, metadata, polls) did
not have any security-header filter, so they were missing:
  - X-Frame-Options (clickjacking, CWE-1021)
  - X-Content-Type-Options: nosniff (MIME-sniffing)
  - Referrer-Policy: strict-origin-when-cross-origin (referrer leakage)
  - Strict-Transport-Security on HTTPS (downgrade)
  - X-XSS-Protection: 0 (legacy XSS auditor disabled)

This is the same defense-in-depth added to the main Rhythmyx webapps.

WebUI/war and system/ear already have the existing PSSecurityHeaderFilter
(com.percussion.utils.security.PSSecurityHeaderFilter), which is a richer
filter that does X-Frame/XSS/HSTS/CSP/Cache-Control. Adding the new
filter there would create duplicate header writes, so they are out of
scope for this slice.

Verified clean build via ./mvn-env.sh clean install -DskipTests (7 of 7
target modules BUILD SUCCESS; PSSecurityHeadersFilter present in each
built WAR's WEB-INF/web.xml).

> Co-Authored by Mavis v1.0.0 using minimax-m3 with agent mavis.
@natechadwick
natechadwick merged commit f124537 into main Aug 28, 2026
3 checks passed
@natechadwick
natechadwick deleted the security/t2-4-security-headers-followup branch August 28, 2026 23:32
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.

T2.4 follow-up: register PSSecurityHeadersFilter in delivery-tier webapp web.xml files

2 participants