<workflowRun _class='org.jenkinsci.plugins.workflow.job.WorkflowRun'><action _class='hudson.model.CauseAction'><cause _class='hudson.triggers.TimerTrigger$TimerTriggerCause'><shortDescription>Lancé par une alarme périodique</shortDescription></cause></action><action _class='hudson.model.ParametersAction'><parameter _class='hudson.model.BooleanParameterValue'><name>SKIP_TEST</name><value>false</value></parameter><parameter _class='hudson.model.BooleanParameterValue'><name>SKIP_QUALITY</name><value>false</value></parameter></action><action _class='org.jenkinsci.plugins.workflow.libs.LibrariesAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.cps.EnvActionImpl'></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesoriginmaster _class='hudson.plugins.git.util.Build'><buildNumber>574</buildNumber><marked><SHA1>56f5661a313b8828cac18f92b68f2f116fbd2cc2</SHA1><branch><SHA1>56f5661a313b8828cac18f92b68f2f116fbd2cc2</SHA1><name>refs/remotes/origin/master</name></branch></marked><revision><SHA1>56f5661a313b8828cac18f92b68f2f116fbd2cc2</SHA1><branch><SHA1>56f5661a313b8828cac18f92b68f2f116fbd2cc2</SHA1><name>refs/remotes/origin/master</name></branch></revision></refsremotesoriginmaster></buildsByBranchName><lastBuiltRevision><SHA1>56f5661a313b8828cac18f92b68f2f116fbd2cc2</SHA1><branch><SHA1>56f5661a313b8828cac18f92b68f2f116fbd2cc2</SHA1><name>refs/remotes/origin/master</name></branch></lastBuiltRevision><remoteUrl>https://github.com/Silverpeas/Jenkins-Pipelines.git</remoteUrl><scmName></scmName></action><action></action><action></action><action></action><action></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesorigin6.2.x _class='hudson.plugins.git.util.Build'><buildNumber>180</buildNumber><marked><SHA1>45e0d31d27a05fd6c36b5f7bd604a0d05f7f378f</SHA1><branch><SHA1>45e0d31d27a05fd6c36b5f7bd604a0d05f7f378f</SHA1><name>refs/remotes/origin/6.2.x</name></branch></marked><revision><SHA1>45e0d31d27a05fd6c36b5f7bd604a0d05f7f378f</SHA1><branch><SHA1>45e0d31d27a05fd6c36b5f7bd604a0d05f7f378f</SHA1><name>refs/remotes/origin/6.2.x</name></branch></revision></refsremotesorigin6.2.x><refsremotesorigin6.3.x _class='hudson.plugins.git.util.Build'><buildNumber>302</buildNumber><marked><SHA1>6df43e66c82d74fdaf07c75d56db339cf3491364</SHA1><branch><SHA1>6df43e66c82d74fdaf07c75d56db339cf3491364</SHA1><name>refs/remotes/origin/6.3.x</name></branch></marked><revision><SHA1>6df43e66c82d74fdaf07c75d56db339cf3491364</SHA1><branch><SHA1>6df43e66c82d74fdaf07c75d56db339cf3491364</SHA1><name>refs/remotes/origin/6.3.x</name></branch></revision></refsremotesorigin6.3.x><refsremotesorigin6.4.x _class='hudson.plugins.git.util.Build'><buildNumber>574</buildNumber><marked><SHA1>198ca3ffa05755ef77382ca0e65444a609294d44</SHA1><branch><SHA1>198ca3ffa05755ef77382ca0e65444a609294d44</SHA1><name>refs/remotes/origin/6.4.x</name></branch></marked><revision><SHA1>198ca3ffa05755ef77382ca0e65444a609294d44</SHA1><branch><SHA1>198ca3ffa05755ef77382ca0e65444a609294d44</SHA1><name>refs/remotes/origin/6.4.x</name></branch></revision></refsremotesorigin6.4.x><refsremotesorigin6.1.x _class='hudson.plugins.git.util.Build'><buildNumber>43</buildNumber><marked><SHA1>a3e9b3a1a829e2b076e72afa8bf8da6253ba6b31</SHA1><branch><SHA1>a3e9b3a1a829e2b076e72afa8bf8da6253ba6b31</SHA1><name>refs/remotes/origin/6.1.x</name></branch></marked><revision><SHA1>a3e9b3a1a829e2b076e72afa8bf8da6253ba6b31</SHA1><branch><SHA1>a3e9b3a1a829e2b076e72afa8bf8da6253ba6b31</SHA1><name>refs/remotes/origin/6.1.x</name></branch></revision></refsremotesorigin6.1.x></buildsByBranchName><lastBuiltRevision><SHA1>198ca3ffa05755ef77382ca0e65444a609294d44</SHA1><branch><SHA1>198ca3ffa05755ef77382ca0e65444a609294d44</SHA1><name>refs/remotes/origin/6.4.x</name></branch></lastBuiltRevision><remoteUrl>https://github.com/Silverpeas/Silverpeas-Core</remoteUrl><scmName></scmName></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesorigin6.2.x _class='hudson.plugins.git.util.Build'><buildNumber>179</buildNumber><marked><SHA1>6976f0d418d1eb565dded101d00140960944e6aa</SHA1><branch><SHA1>6976f0d418d1eb565dded101d00140960944e6aa</SHA1><name>refs/remotes/origin/6.2.x</name></branch></marked><revision><SHA1>6976f0d418d1eb565dded101d00140960944e6aa</SHA1><branch><SHA1>6976f0d418d1eb565dded101d00140960944e6aa</SHA1><name>refs/remotes/origin/6.2.x</name></branch></revision></refsremotesorigin6.2.x><refsremotesorigin6.3.x _class='hudson.plugins.git.util.Build'><buildNumber>302</buildNumber><marked><SHA1>f1c18f5b16ecf085b04a36a636aa4aa26ec5d773</SHA1><branch><SHA1>f1c18f5b16ecf085b04a36a636aa4aa26ec5d773</SHA1><name>refs/remotes/origin/6.3.x</name></branch></marked><revision><SHA1>f1c18f5b16ecf085b04a36a636aa4aa26ec5d773</SHA1><branch><SHA1>f1c18f5b16ecf085b04a36a636aa4aa26ec5d773</SHA1><name>refs/remotes/origin/6.3.x</name></branch></revision></refsremotesorigin6.3.x><refsremotesorigin6.4.x _class='hudson.plugins.git.util.Build'><buildNumber>574</buildNumber><marked><SHA1>d221c6c65b1766978f5dd82f28c11c7ceaea9b23</SHA1><branch><SHA1>d221c6c65b1766978f5dd82f28c11c7ceaea9b23</SHA1><name>refs/remotes/origin/6.4.x</name></branch></marked><revision><SHA1>d221c6c65b1766978f5dd82f28c11c7ceaea9b23</SHA1><branch><SHA1>d221c6c65b1766978f5dd82f28c11c7ceaea9b23</SHA1><name>refs/remotes/origin/6.4.x</name></branch></revision></refsremotesorigin6.4.x><refsremotesorigin6.1.x _class='hudson.plugins.git.util.Build'><buildNumber>43</buildNumber><marked><SHA1>9dbcbf90b830646ccd42fb388d09dbe09ecea4e6</SHA1><branch><SHA1>9dbcbf90b830646ccd42fb388d09dbe09ecea4e6</SHA1><name>refs/remotes/origin/6.1.x</name></branch></marked><revision><SHA1>9dbcbf90b830646ccd42fb388d09dbe09ecea4e6</SHA1><branch><SHA1>9dbcbf90b830646ccd42fb388d09dbe09ecea4e6</SHA1><name>refs/remotes/origin/6.1.x</name></branch></revision></refsremotesorigin6.1.x></buildsByBranchName><lastBuiltRevision><SHA1>d221c6c65b1766978f5dd82f28c11c7ceaea9b23</SHA1><branch><SHA1>d221c6c65b1766978f5dd82f28c11c7ceaea9b23</SHA1><name>refs/remotes/origin/6.4.x</name></branch></lastBuiltRevision><remoteUrl>https://github.com/Silverpeas/Silverpeas-Components</remoteUrl><scmName></scmName></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesorigin6.2.x _class='hudson.plugins.git.util.Build'><buildNumber>179</buildNumber><marked><SHA1>b3b8a633d5a98083849becc7464aebbca4218501</SHA1><branch><SHA1>b3b8a633d5a98083849becc7464aebbca4218501</SHA1><name>refs/remotes/origin/6.2.x</name></branch></marked><revision><SHA1>b3b8a633d5a98083849becc7464aebbca4218501</SHA1><branch><SHA1>b3b8a633d5a98083849becc7464aebbca4218501</SHA1><name>refs/remotes/origin/6.2.x</name></branch></revision></refsremotesorigin6.2.x><refsremotesorigin6.3.x _class='hudson.plugins.git.util.Build'><buildNumber>302</buildNumber><marked><SHA1>586ebdd23e10f812e41a52cbf1a3a7f4a81fe924</SHA1><branch><SHA1>586ebdd23e10f812e41a52cbf1a3a7f4a81fe924</SHA1><name>refs/remotes/origin/6.3.x</name></branch></marked><revision><SHA1>586ebdd23e10f812e41a52cbf1a3a7f4a81fe924</SHA1><branch><SHA1>586ebdd23e10f812e41a52cbf1a3a7f4a81fe924</SHA1><name>refs/remotes/origin/6.3.x</name></branch></revision></refsremotesorigin6.3.x><refsremotesorigin6.4.x _class='hudson.plugins.git.util.Build'><buildNumber>574</buildNumber><marked><SHA1>cd3dbdb143c1ba8d859484f154fd760c353dd0ed</SHA1><branch><SHA1>cd3dbdb143c1ba8d859484f154fd760c353dd0ed</SHA1><name>refs/remotes/origin/6.4.x</name></branch></marked><revision><SHA1>cd3dbdb143c1ba8d859484f154fd760c353dd0ed</SHA1><branch><SHA1>cd3dbdb143c1ba8d859484f154fd760c353dd0ed</SHA1><name>refs/remotes/origin/6.4.x</name></branch></revision></refsremotesorigin6.4.x><refsremotesorigin6.1.x _class='hudson.plugins.git.util.Build'><buildNumber>43</buildNumber><marked><SHA1>070793013d99eb148b16b15d6a191b20b72bc82c</SHA1><branch><SHA1>070793013d99eb148b16b15d6a191b20b72bc82c</SHA1><name>refs/remotes/origin/6.1.x</name></branch></marked><revision><SHA1>070793013d99eb148b16b15d6a191b20b72bc82c</SHA1><branch><SHA1>070793013d99eb148b16b15d6a191b20b72bc82c</SHA1><name>refs/remotes/origin/6.1.x</name></branch></revision></refsremotesorigin6.1.x></buildsByBranchName><lastBuiltRevision><SHA1>cd3dbdb143c1ba8d859484f154fd760c353dd0ed</SHA1><branch><SHA1>cd3dbdb143c1ba8d859484f154fd760c353dd0ed</SHA1><name>refs/remotes/origin/6.4.x</name></branch></lastBuiltRevision><remoteUrl>https://github.com/Silverpeas/Silverpeas-Looks</remoteUrl><scmName></scmName></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesorigin6.2.x _class='hudson.plugins.git.util.Build'><buildNumber>179</buildNumber><marked><SHA1>abe99f69032413c083fb9ee7a98afc1e2ab5114d</SHA1><branch><SHA1>abe99f69032413c083fb9ee7a98afc1e2ab5114d</SHA1><name>refs/remotes/origin/6.2.x</name></branch></marked><revision><SHA1>abe99f69032413c083fb9ee7a98afc1e2ab5114d</SHA1><branch><SHA1>abe99f69032413c083fb9ee7a98afc1e2ab5114d</SHA1><name>refs/remotes/origin/6.2.x</name></branch></revision></refsremotesorigin6.2.x><refsremotesorigin6.3.x _class='hudson.plugins.git.util.Build'><buildNumber>302</buildNumber><marked><SHA1>146430cd63566b3be410c8dd534faa57033583b3</SHA1><branch><SHA1>146430cd63566b3be410c8dd534faa57033583b3</SHA1><name>refs/remotes/origin/6.3.x</name></branch></marked><revision><SHA1>146430cd63566b3be410c8dd534faa57033583b3</SHA1><branch><SHA1>146430cd63566b3be410c8dd534faa57033583b3</SHA1><name>refs/remotes/origin/6.3.x</name></branch></revision></refsremotesorigin6.3.x><refsremotesorigin6.4.x _class='hudson.plugins.git.util.Build'><buildNumber>574</buildNumber><marked><SHA1>b329103b18d9998a62da3553abb417ec1327d6e9</SHA1><branch><SHA1>b329103b18d9998a62da3553abb417ec1327d6e9</SHA1><name>refs/remotes/origin/6.4.x</name></branch></marked><revision><SHA1>b329103b18d9998a62da3553abb417ec1327d6e9</SHA1><branch><SHA1>b329103b18d9998a62da3553abb417ec1327d6e9</SHA1><name>refs/remotes/origin/6.4.x</name></branch></revision></refsremotesorigin6.4.x><refsremotesorigin6.1.x _class='hudson.plugins.git.util.Build'><buildNumber>43</buildNumber><marked><SHA1>62ef5e63f545c1d332fb8e528897aff1fac54150</SHA1><branch><SHA1>62ef5e63f545c1d332fb8e528897aff1fac54150</SHA1><name>refs/remotes/origin/6.1.x</name></branch></marked><revision><SHA1>62ef5e63f545c1d332fb8e528897aff1fac54150</SHA1><branch><SHA1>62ef5e63f545c1d332fb8e528897aff1fac54150</SHA1><name>refs/remotes/origin/6.1.x</name></branch></revision></refsremotesorigin6.1.x></buildsByBranchName><lastBuiltRevision><SHA1>b329103b18d9998a62da3553abb417ec1327d6e9</SHA1><branch><SHA1>b329103b18d9998a62da3553abb417ec1327d6e9</SHA1><name>refs/remotes/origin/6.4.x</name></branch></lastBuiltRevision><remoteUrl>https://github.com/Silverpeas/Silverpeas-Setup</remoteUrl><scmName></scmName></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesorigin6.2.x _class='hudson.plugins.git.util.Build'><buildNumber>179</buildNumber><marked><SHA1>c96d415a32db2f558555695b382b89c11ac347be</SHA1><branch><SHA1>c96d415a32db2f558555695b382b89c11ac347be</SHA1><name>refs/remotes/origin/6.2.x</name></branch></marked><revision><SHA1>c96d415a32db2f558555695b382b89c11ac347be</SHA1><branch><SHA1>c96d415a32db2f558555695b382b89c11ac347be</SHA1><name>refs/remotes/origin/6.2.x</name></branch></revision></refsremotesorigin6.2.x><refsremotesorigin6.3.x _class='hudson.plugins.git.util.Build'><buildNumber>302</buildNumber><marked><SHA1>10719018413e414cfa70c0f64a945a72670797f4</SHA1><branch><SHA1>10719018413e414cfa70c0f64a945a72670797f4</SHA1><name>refs/remotes/origin/6.3.x</name></branch></marked><revision><SHA1>10719018413e414cfa70c0f64a945a72670797f4</SHA1><branch><SHA1>10719018413e414cfa70c0f64a945a72670797f4</SHA1><name>refs/remotes/origin/6.3.x</name></branch></revision></refsremotesorigin6.3.x><refsremotesorigin6.4.x _class='hudson.plugins.git.util.Build'><buildNumber>574</buildNumber><marked><SHA1>3c2e5e96c0ee61f807fd61b5d43f84b63ec54298</SHA1><branch><SHA1>3c2e5e96c0ee61f807fd61b5d43f84b63ec54298</SHA1><name>refs/remotes/origin/6.4.x</name></branch></marked><revision><SHA1>3c2e5e96c0ee61f807fd61b5d43f84b63ec54298</SHA1><branch><SHA1>3c2e5e96c0ee61f807fd61b5d43f84b63ec54298</SHA1><name>refs/remotes/origin/6.4.x</name></branch></revision></refsremotesorigin6.4.x><refsremotesorigin6.1.x _class='hudson.plugins.git.util.Build'><buildNumber>43</buildNumber><marked><SHA1>2c1de09b276e4aa8622563451ebd70a4f24759ce</SHA1><branch><SHA1>2c1de09b276e4aa8622563451ebd70a4f24759ce</SHA1><name>refs/remotes/origin/6.1.x</name></branch></marked><revision><SHA1>2c1de09b276e4aa8622563451ebd70a4f24759ce</SHA1><branch><SHA1>2c1de09b276e4aa8622563451ebd70a4f24759ce</SHA1><name>refs/remotes/origin/6.1.x</name></branch></revision></refsremotesorigin6.1.x></buildsByBranchName><lastBuiltRevision><SHA1>3c2e5e96c0ee61f807fd61b5d43f84b63ec54298</SHA1><branch><SHA1>3c2e5e96c0ee61f807fd61b5d43f84b63ec54298</SHA1><name>refs/remotes/origin/6.4.x</name></branch></lastBuiltRevision><remoteUrl>https://github.com/Silverpeas/Silverpeas-Distribution</remoteUrl><scmName></scmName></action><action _class='hudson.plugins.git.util.BuildData'><buildsByBranchName><refsremotesorigin6.2.x _class='hudson.plugins.git.util.Build'><buildNumber>179</buildNumber><marked><SHA1>1bdb8f99972aa96dacfc6d8775a7364ab6e845c2</SHA1><branch><SHA1>1bdb8f99972aa96dacfc6d8775a7364ab6e845c2</SHA1><name>refs/remotes/origin/6.2.x</name></branch></marked><revision><SHA1>1bdb8f99972aa96dacfc6d8775a7364ab6e845c2</SHA1><branch><SHA1>1bdb8f99972aa96dacfc6d8775a7364ab6e845c2</SHA1><name>refs/remotes/origin/6.2.x</name></branch></revision></refsremotesorigin6.2.x><refsremotesorigin6.3.x _class='hudson.plugins.git.util.Build'><buildNumber>302</buildNumber><marked><SHA1>e6cf90efb933ea1d65558af1cade3056ac4b6462</SHA1><branch><SHA1>e6cf90efb933ea1d65558af1cade3056ac4b6462</SHA1><name>refs/remotes/origin/6.3.x</name></branch></marked><revision><SHA1>e6cf90efb933ea1d65558af1cade3056ac4b6462</SHA1><branch><SHA1>e6cf90efb933ea1d65558af1cade3056ac4b6462</SHA1><name>refs/remotes/origin/6.3.x</name></branch></revision></refsremotesorigin6.3.x><refsremotesorigin6.4.x _class='hudson.plugins.git.util.Build'><buildNumber>574</buildNumber><marked><SHA1>2d8a5e346fd50bd478e8532b3f5d9bfe3457c88e</SHA1><branch><SHA1>2d8a5e346fd50bd478e8532b3f5d9bfe3457c88e</SHA1><name>refs/remotes/origin/6.4.x</name></branch></marked><revision><SHA1>2d8a5e346fd50bd478e8532b3f5d9bfe3457c88e</SHA1><branch><SHA1>2d8a5e346fd50bd478e8532b3f5d9bfe3457c88e</SHA1><name>refs/remotes/origin/6.4.x</name></branch></revision></refsremotesorigin6.4.x><refsremotesorigin6.1.x _class='hudson.plugins.git.util.Build'><buildNumber>43</buildNumber><marked><SHA1>64a1ed5c344bf6e81820366b63120c460193579c</SHA1><branch><SHA1>64a1ed5c344bf6e81820366b63120c460193579c</SHA1><name>refs/remotes/origin/6.1.x</name></branch></marked><revision><SHA1>64a1ed5c344bf6e81820366b63120c460193579c</SHA1><branch><SHA1>64a1ed5c344bf6e81820366b63120c460193579c</SHA1><name>refs/remotes/origin/6.1.x</name></branch></revision></refsremotesorigin6.1.x></buildsByBranchName><lastBuiltRevision><SHA1>2d8a5e346fd50bd478e8532b3f5d9bfe3457c88e</SHA1><branch><SHA1>2d8a5e346fd50bd478e8532b3f5d9bfe3457c88e</SHA1><name>refs/remotes/origin/6.4.x</name></branch></lastBuiltRevision><remoteUrl>https://github.com/Silverpeas/Silverpeas-Assembly</remoteUrl><scmName></scmName></action><action></action><action _class='hudson.plugins.sonar.action.SonarAnalysisAction'><ceTaskId>AaEuydtl_VRRlkU-_mf3</ceTaskId><installationName>Silverpeas SonarCloud</installationName><installationUrl>https://sonarcloud.io</installationUrl><new>true</new><serverUrl>https://sonarcloud.io</serverUrl><skipped>false</skipped><sonarqubeDashboardUrl>https://sonarcloud.io/dashboard?id=Silverpeas_Silverpeas-Core2&amp;branch=6.4.x</sonarqubeDashboardUrl></action><action></action><action></action><action></action><action></action><action></action><action _class='hudson.plugins.sonar.action.SonarBuildBadgeAction'><url>https://sonarcloud.io/dashboard?id=Silverpeas_Silverpeas-Core2&amp;branch=6.4.x</url></action><action></action><action _class='org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction'></action><action _class='org.jenkinsci.plugins.pipeline.modeldefinition.actions.RestartDeclarativePipelineAction'></action><action></action><action _class='org.jenkinsci.plugins.workflow.job.views.FlowGraphAction'></action><action></action><action></action><artifact><displayPath>build.yaml</displayPath><fileName>build.yaml</fileName><relativePath>target/build.yaml</relativePath></artifact><building>false</building><displayName>6.4.9-build261012</displayName><duration>7412863</duration><estimatedDuration>6131545</estimatedDuration><fullDisplayName>Silverpeas_Stable_AutoDeploy 6.4.9-build261012</fullDisplayName><id>574</id><keepLog>false</keepLog><number>574</number><queueId>68025</queueId><result>SUCCESS</result><timestamp>1791780360714</timestamp><url>https://integration.silverpeas.org/jenkins/view/Continuous%20Autodeployment%20Build/job/Silverpeas_Stable_AutoDeploy/574/</url><changeSet _class='hudson.plugins.git.GitChangeSetList'><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>core-api/src/test/java/org/silverpeas/core/security/html/EmbeddedSourceValidatorTest.java</affectedPath><affectedPath>core-api/src/main/java/org/silverpeas/core/security/html/EmbeddedSourceValidator.java</affectedPath><affectedPath>core-war/src/main/webapp/attachment/jsp/editAttachedFiles.jsp</affectedPath><affectedPath>core-library/src/test/java/org/silverpeas/core/contribution/content/wysiwyg/service/WysiwygContentTransformerTest.java</affectedPath><affectedPath>core-web/src/test/java/org/silverpeas/core/web/filter/IFrameCheckerTest.java</affectedPath><commitId>d9bbf308e876bfbbc480b74aa82f1a2afe938d59</commitId><timestamp>1791452716000</timestamp><author><absoluteUrl>https://integration.silverpeas.org/jenkins/user/mmoquillon</absoluteUrl><fullName>Miguel Moquillon</fullName></author><authorEmail>miguel.moquillon@silverpeas.com</authorEmail><comment>Keep the WYSIWYG images whose source has characters forbidden by the URI syntax

Since the fix of vulnerability #1459, a WYSIWYG content is sanitized at
rendering and the media referring a non-allowed source are dropped. The
source was checked by parsing it as a java.net.URI, so a src with a
whitespace (or any other character the URI syntax forbids) was rejected
and the img element silently disappeared from the rendered content,
whereas the browsers accept such a URL by percent-encoding it themselves.

EmbeddedSourceValidator now checks a source that isn't a well-formed URI
the way a browser would send it: the characters a browser percent-encodes
without interpreting them (whitespace, quotes, brackets, braces, ...) are
encoded before the check. The backslashes and the control characters stay
rejected, as a browser gives them a meaning of their own, and the percent
sign isn't touched so that an encoded path traversal is still detected.

Such a src was produced by the "Browse server" page of the editor: the
attachment URL was passed through a javascript: href, and a browser
percent-decodes the body of a javascript: URL before running it. The
link now uses an onclick handler, which keeps the URL as served.

Ported from master (a23ba5c09f) with the hexadecimal formatting of Java 11.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
</comment><date>2026-10-08 11:45:16 +0200</date><id>d9bbf308e876bfbbc480b74aa82f1a2afe938d59</id><msg>Keep the WYSIWYG images whose source has characters forbidden by the URI syntax</msg><path><editType>edit</editType><file>core-war/src/main/webapp/attachment/jsp/editAttachedFiles.jsp</file></path><path><editType>edit</editType><file>core-web/src/test/java/org/silverpeas/core/web/filter/IFrameCheckerTest.java</file></path><path><editType>add</editType><file>core-api/src/test/java/org/silverpeas/core/security/html/EmbeddedSourceValidatorTest.java</file></path><path><editType>edit</editType><file>core-api/src/main/java/org/silverpeas/core/security/html/EmbeddedSourceValidator.java</file></path><path><editType>edit</editType><file>core-library/src/test/java/org/silverpeas/core/contribution/content/wysiwyg/service/WysiwygContentTransformerTest.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>core-library/src/main/java/org/silverpeas/core/contribution/content/wysiwyg/service/directive/SanitizeForRenderingDirective.java</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/IFrameChecker.java</affectedPath><affectedPath>core-web/src/test/resources/org/silverpeas/util/security.properties</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/OpeningTag.java</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/MassiveWebSecurityFilter.java</affectedPath><affectedPath>core-configuration/src/main/config/properties/org/silverpeas/util/security.properties</affectedPath><affectedPath>core-web/src/test/java/org/silverpeas/core/web/filter/ScriptCheckerTest.java</affectedPath><affectedPath>core-api/src/test/java/org/silverpeas/core/security/html/EmbeddedSourceValidatorTest.java</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/ScriptChecker.java</affectedPath><affectedPath>core-web/src/integration-test/java/org/silverpeas/core/web/filter/MassiveWebSecurityFilterIT.java</affectedPath><affectedPath>core-api/src/main/java/org/silverpeas/core/security/html/EmbeddedSourceValidator.java</affectedPath><affectedPath>core-library/src/test/java/org/silverpeas/core/contribution/content/wysiwyg/service/WysiwygContentTransformerTest.java</affectedPath><affectedPath>core-api/src/main/java/org/silverpeas/core/util/security/SecuritySettings.java</affectedPath><affectedPath>core-web/src/integration-test/resources/org/silverpeas/util/security.properties</affectedPath><affectedPath>core-web/src/test/java/org/silverpeas/core/web/filter/IFrameCheckerTest.java</affectedPath><commitId>9a5e4924a0c6c703395947a3a87c3e8f82fab971</commitId><timestamp>1791547224000</timestamp><author><absoluteUrl>https://integration.silverpeas.org/jenkins/user/mmoquillon</absoluteUrl><fullName>Miguel Moquillon</fullName></author><authorEmail>miguel.moquillon@gmail.com</authorEmail><comment>Bug #15502 Allow again the scripts in the WYSIWYG contents for trusted source

Since 6.4.7, the content of the WYSIWYG editor is checked against the XSS
injections like any other request parameter, and the contents are sanitized
when rendered or exported. Any script was then both rejected by
MassiveWebSecurityFilter and dropped by SanitizeForRenderingDirective, whereas
our customers use scripts to make their web pages dynamic (webPages
application).

A script is now accepted, at both ends, provided it carries no code by itself
and it loads it from an allowed source. The rule on the sources is the one
already applied to the iframes and to the media (EmbeddedSourceValidator):
the Silverpeas application is always allowed, the external hosts have to be
declared, by HTTPS only. For the scripts they are declared by the new property
security.external.script.hosts.allowed, empty by default.

This shared rule is refined: the weblib web application, which serves beside
Silverpeas the resources specific to the platform, is now always allowed too,
for the scripts as well as for the iframes and the media.

The files attached to the contributions are uploaded by the users themselves,
so a script loading its code from one of them is refused unless the new
property security.script.attachments.allowed is explicitly set to true (false
by default, no value being equivalent to false). The routes of the file
servers are concerned, among which the permalink of a file as it redirects to
it. The iframes aren't concerned: an attached file, like a PDF document, can
still be embedded, the file servers serving it along with a content security
policy forbidding it any script.

On the filter side, a script is accepted only when it is strictly parsed: a
well-formed opening tag with a single src attribute, directly followed by its
closing tag. A closing tag alone is still rejected. On the rendering side,
whatever an allowed script carries by itself is dropped.

Fix also a bypass of the filter on the source of the iframes: the HTML
entities were decoded as the HTML 4 ones only, whereas the browsers know far
more of them and decode them even loosely written. So a source such as
"https&amp;colon;//www.evil.org/" was taken for a relative URL within Silverpeas.
The attribute values are now decoded by the decoder of the OWASP sanitizer,
the one by which the contents being rendered are read, so that both ends read
a source the same way. The strict parsing of an opening tag is extracted from
IFrameChecker into OpeningTag in order to be shared with ScriptChecker.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
</comment><date>2026-10-09 14:00:24 +0200</date><id>9a5e4924a0c6c703395947a3a87c3e8f82fab971</id><msg>Bug #15502 Allow again the scripts in the WYSIWYG contents for trusted source</msg><path><editType>edit</editType><file>core-library/src/test/java/org/silverpeas/core/contribution/content/wysiwyg/service/WysiwygContentTransformerTest.java</file></path><path><editType>edit</editType><file>core-api/src/main/java/org/silverpeas/core/util/security/SecuritySettings.java</file></path><path><editType>edit</editType><file>core-library/src/main/java/org/silverpeas/core/contribution/content/wysiwyg/service/directive/SanitizeForRenderingDirective.java</file></path><path><editType>edit</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/MassiveWebSecurityFilter.java</file></path><path><editType>edit</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/IFrameChecker.java</file></path><path><editType>edit</editType><file>core-configuration/src/main/config/properties/org/silverpeas/util/security.properties</file></path><path><editType>edit</editType><file>core-web/src/integration-test/java/org/silverpeas/core/web/filter/MassiveWebSecurityFilterIT.java</file></path><path><editType>add</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/ScriptChecker.java</file></path><path><editType>edit</editType><file>core-web/src/test/java/org/silverpeas/core/web/filter/IFrameCheckerTest.java</file></path><path><editType>edit</editType><file>core-api/src/test/java/org/silverpeas/core/security/html/EmbeddedSourceValidatorTest.java</file></path><path><editType>edit</editType><file>core-web/src/integration-test/resources/org/silverpeas/util/security.properties</file></path><path><editType>add</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/OpeningTag.java</file></path><path><editType>edit</editType><file>core-web/src/test/resources/org/silverpeas/util/security.properties</file></path><path><editType>edit</editType><file>core-api/src/main/java/org/silverpeas/core/security/html/EmbeddedSourceValidator.java</file></path><path><editType>add</editType><file>core-web/src/test/java/org/silverpeas/core/web/filter/ScriptCheckerTest.java</file></path></item><item _class='hudson.plugins.git.GitChangeSet'><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/IFrameChecker.java</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/XssPatternChecker.java</affectedPath><affectedPath>core-web/src/test/java/org/silverpeas/core/web/filter/XssCheckerTest.java</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/exception/WebXssInjectionSecurityException.java</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/OpeningTag.java</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/MassiveWebSecurityFilter.java</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/XssChecker.java</affectedPath><affectedPath>core-web/src/test/java/org/silverpeas/core/web/filter/ScriptCheckerTest.java</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/SecurityChecker.java</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/ScriptChecker.java</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/SecurityCheckerProvider.java</affectedPath><affectedPath>core-web/src/test/java/org/silverpeas/core/web/filter/XssPatternCheckerTest.java</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/exception/WebSecurityException.java</affectedPath><affectedPath>core-web/src/test/java/org/silverpeas/core/web/filter/IFrameCheckerTest.java</affectedPath><affectedPath>core-web/src/main/java/org/silverpeas/core/web/filter/MessageFilter.java</affectedPath><commitId>198ca3ffa05755ef77382ca0e65444a609294d44</commitId><timestamp>1791553299000</timestamp><author><absoluteUrl>https://integration.silverpeas.org/jenkins/user/mmoquillon</absoluteUrl><fullName>Miguel Moquillon</fullName></author><authorEmail>miguel.moquillon@silverpeas.com</authorEmail><comment>Bug #15502 Tell the reason for which a value is rejected as a XSS injection

A rejected request was answered and logged with the sole generic message
"Attempt of a XSS injection detected", so neither the writer of a content nor
an administrator could know what to fix. The case that revealed it is a
self-closing script tag, &lt;script src="/weblib/toto.js"/&gt;, which isn't closed
in HTML: the browsers read the rest of the document as the code of the
script, and the filter rightly refuses a script not immediately followed by
its closing tag.

The XSS checks now tell the reason of a rejection along with an excerpt of
what has been detected: a forbidden element, an event callback attribute, a
scripting scheme as an attribute value, the non-allowed source of an iframe
or of a script, a script not immediately closed, a closing script tag alone,
an iframe or a script that cannot be strictly parsed. The reason is carried
by WebSecurityException as a detail apart from the message: it is logged,
whereas the client is still answered the generic message only, so that an
attacker isn't helped in adjusting a payload.

The checks are reorganized around the SecurityChecker interface, which the
IFrameChecker, the ScriptChecker and the new XssPatternChecker (the patterns
formerly held by the filter) implement. XssChecker composes the checkers it
is given, in their order, and tells the first rejection. The
SecurityCheckerProvider is the only one to know the implementations and how
to set them up for a request: a new kind of check is introduced by a new
implementation registered there, without any other change.

Co-Authored-By: Claude Fable 5.1 &lt;noreply@anthropic.com&gt;
</comment><date>2026-10-09 15:41:39 +0200</date><id>198ca3ffa05755ef77382ca0e65444a609294d44</id><msg>Bug #15502 Tell the reason for which a value is rejected as a XSS injection</msg><path><editType>edit</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/IFrameChecker.java</file></path><path><editType>edit</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/exception/WebSecurityException.java</file></path><path><editType>add</editType><file>core-web/src/test/java/org/silverpeas/core/web/filter/XssPatternCheckerTest.java</file></path><path><editType>add</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/XssChecker.java</file></path><path><editType>edit</editType><file>core-web/src/test/java/org/silverpeas/core/web/filter/IFrameCheckerTest.java</file></path><path><editType>edit</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/MassiveWebSecurityFilter.java</file></path><path><editType>add</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/SecurityCheckerProvider.java</file></path><path><editType>edit</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/ScriptChecker.java</file></path><path><editType>add</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/SecurityChecker.java</file></path><path><editType>edit</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/MessageFilter.java</file></path><path><editType>add</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/XssPatternChecker.java</file></path><path><editType>add</editType><file>core-web/src/test/java/org/silverpeas/core/web/filter/XssCheckerTest.java</file></path><path><editType>edit</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/OpeningTag.java</file></path><path><editType>edit</editType><file>core-web/src/test/java/org/silverpeas/core/web/filter/ScriptCheckerTest.java</file></path><path><editType>edit</editType><file>core-web/src/main/java/org/silverpeas/core/web/filter/exception/WebXssInjectionSecurityException.java</file></path></item><kind>git</kind></changeSet><culprit><absoluteUrl>https://integration.silverpeas.org/jenkins/user/mmoquillon</absoluteUrl><fullName>Miguel Moquillon</fullName></culprit><inProgress>false</inProgress><previousBuild><number>573</number><url>https://integration.silverpeas.org/jenkins/view/Continuous%20Autodeployment%20Build/job/Silverpeas_Stable_AutoDeploy/573/</url></previousBuild></workflowRun>