Thanks, created a pull request for review.

-----Original Message-----
From: Martin Grigorov <mgrigo...@apache.org> 
Sent: Thursday, February 13, 2025 5:53 AM
To: users@wicket.apache.org
Subject: [EXTERNAL] Re: Need ResourceReference level placeholders for SRI 
integrity hashes and CrossOrigin for PCI Compliance

BE CAREFUL:
This email originated from outside the organization. Do not click links, open 
attachments, or enter user credentials, unless you recognize the sender and 
know the content is safe.
BE CAREFUL:


On Tue, Feb 11, 2025 at 10:15 PM Michael Pritt < 
michael.pr...@westringtechnologies.com> wrote:

> Hi, we're currently using wicket 10.1.0, and trying to implement SRI
> hashes for all the javascript/css modules we use for PCI compliance.   It
> is easy to create the integrity and cross origin values needed when 
> the we have the control over the creation of the JavaScriptHeaderItem 
> or CssReferenceHeaderItem.  It becomes much more difficult when there 
> are resources that are created and then stored in wicket framework 
> classes (whether we create or the framework that creates these 
> resource references) and then these resources are used LATER within 
> the framework which does the actual creation of the header items.
>
> As an example try setting the integrity hash for the 
> "wicket-ajax-jquery.js" file which is referenced from the 
> wicket-core-10.1.0.jar.  This resource is created initially through 
> the WicketAjaxJQueryResourceReference class and used in the
> JavaScriptLibrarySettings class.    The call getWicketAjaxReference()
> inside the JavaScriptLibrarySettings is used by the framework in 
> various places, and those places create the actual 
> JavaScriptReferenceHeaderItem
> (see OnDomReadyHeaderItem.getDependencies()  as an example).   If we can
> add both an integrity and cross-origin variables to the definition of 
> a ResourceReference class, those values could then be used in the rendering
> of the JavaScriptReferenceHeaderItem.   This can be done by overriding the
> getIntegrity function, so if the header item's integrity value is not 
> defined (i.e. null) then use the value defined from the 
> ResourceReference (same would go for handling the cross-origin).
>
> The same changes for handling CSS header items, by changing the 
> function AbstractCssReferenceHeaderItem. internalRenderCSSReference() 
> to more correctly handle integrity and cross origin values  (note that 
> the below code changes matches what is already being done in 
> AbstractJavaScriptReferenceHeaderItem.internalRenderJavaScriptReferenc
> e, it shouldn't reference the class variables directly but through 
> their accessor
> methods)
>
> attributes.putAttribute(CssUtils.ATTR_CROSS_ORIGIN,
>                                                 crossOrigin == null ? 
> null
> : crossOrigin.getRealName());
>
> attributes.putAttribute(CssUtils.ATTR_INTEGRITY, integrity); changes 
> to
>
> attributes.putAttribute(CssUtils.ATTR_CROSS_ORIGIN,
>                                                 getCrossOrigin() == null ?
> null : getCrossOrigin().getRealName());
>
> attributes.putAttribute(CssUtils.ATTR_INTEGRITY, getIntegrity());
>
> The above would help in solving the calls by the framework internally 
> that create the header items, without having to override main 
> framework classes to support this need.
>
> In addition to this, another change would be to change the
> JavaScriptLibrarySettings.getWicketAjaxReference() to not return a 
> ResourceReference but instead return a JavaScriptReferenceHeaderItem.  
> It looks like in all cases we saw, the framework was just taking the 
> resource reference and creating the JavaScriptReferenceHeaderItem.  
> Again, that way it will give more control over the actual header reference at 
> least for
> this particular example mentioned above.   Note that this wouldn't solve
> the other places that use other wicket javascript/css resources.
>
> Thoughts?  Does this sound reasonable and would be something to change 
> in wicket?
>

It sounds reasonable to me!
Do you want to send a Pull Request ?

Reply via email to