This is an automated email from the ASF dual-hosted git repository.
git-site-role pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/struts-site.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 7a002da Automatic Site Publish by Buildbot
7a002da is described below
commit 7a002daed8028c4b1f94b1eee7eff8dcc09241a6
Author: buildbot <[email protected]>
AuthorDate: Wed Dec 2 19:14:04 2020 +0000
Automatic Site Publish by Buildbot
---
output/core-developers/i18n-interceptor.html | 7 +-
output/core-developers/interceptors.html | 8 +--
output/core-developers/struts-default-xml.html | 8 +--
output/security/index.html | 98 +++++++++++++++++---------
4 files changed, 79 insertions(+), 42 deletions(-)
diff --git a/output/core-developers/i18n-interceptor.html
b/output/core-developers/i18n-interceptor.html
index d3589b4..53a1c7f 100644
--- a/output/core-developers/i18n-interceptor.html
+++ b/output/core-developers/i18n-interceptor.html
@@ -158,7 +158,12 @@ to and save in a cookie. By default this is <code
class="highlighter-rouge">requ
<li><code class="highlighter-rouge">requestOnlyParameterName</code>
(optional) - the name of the HTTP request parameter that dictates the locale to
switch to
for the current request only, without saving it in the session. By default
this is <code class="highlighter-rouge">request_only_locale</code></li>
<li><code class="highlighter-rouge">attributeName</code> (optional) - the
name of the session key to store the selected locale. By default this is <code
class="highlighter-rouge">WW_TRANS_I18N_LOCALE</code></li>
- <li><code class="highlighter-rouge">localeStorage</code> (optional) - the
name of storage location, it can be <code
class="highlighter-rouge">none</code>, <code
class="highlighter-rouge">session</code> or <code
class="highlighter-rouge">cookie</code>. By default this is <code
class="highlighter-rouge">session</code></li>
+ <li><code class="highlighter-rouge">localeStorage</code> (optional) - the
name of storage location, it can be <code
class="highlighter-rouge">accept_language</code>, <code
class="highlighter-rouge">request</code>, <code
class="highlighter-rouge">session</code> or <code
class="highlighter-rouge">cookie</code>,
+by default this is <code class="highlighter-rouge">session</code>.</li>
+ <li><code class="highlighter-rouge">supportedLocale</code> (optional) - a
set of comma separated locale supported by the application, once <code
class="highlighter-rouge">storage</code> is set
+to <code class="highlighter-rouge">accept_language</code>, interceptor will
try to match <code class="highlighter-rouge">supportedLocale</code> with locale
provided in <code class="highlighter-rouge">Accept-Language</code> header.
+Also in case of using <code class="highlighter-rouge">session</code> or <code
class="highlighter-rouge">cookie</code>, interceptor will try to first match
with <code class="highlighter-rouge">Accept-Language</code> header
+once <code class="highlighter-rouge">supportedLocale</code> has been defined.
Since Struts 2.6.</li>
</ul>
<h2 id="examples">Examples</h2>
diff --git a/output/core-developers/interceptors.html
b/output/core-developers/interceptors.html
index a04c195..ce5508b 100644
--- a/output/core-developers/interceptors.html
+++ b/output/core-developers/interceptors.html
@@ -258,8 +258,8 @@ than reiterate the same list of Interceptors, we can bundle
these Interceptors t
and {@link com.opensymphony.xwork2.inject.Inject}
--></span>
<span class="cp"><!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
- "http://struts.apache.org/dtds/struts-2.5.dtd"></span>
+ "-//Apache Software Foundation//DTD Struts Configuration 2.6//EN"
+ "http://struts.apache.org/dtds/struts-2.6.dtd"></span>
<span class="nt"><struts></span>
@@ -628,10 +628,10 @@ than reiterate the same list of Interceptors, we can
bundle these Interceptors t
<span class="nt"><interceptor-ref</span> <span
class="na">name=</span><span class="s">"coepInterceptor"</span><span
class="nt">></span>
<span class="nt"><param</span> <span
class="na">name=</span><span class="s">"enforcingMode"</span><span
class="nt">></span>false<span class="nt"></param></span>
<span class="nt"><param</span> <span
class="na">name=</span><span class="s">"disabled"</span><span
class="nt">></span>false<span class="nt"></param></span>
- <span class="nt"><param</span> <span
class="na">name=</span><span class="s">"exemptedPaths"</span><span
class="nt">></param></span>
+ <span class="nt"><param</span> <span
class="na">name=</span><span class="s">"exemptedPaths"</span><span
class="nt">/></span>
<span class="nt"></interceptor-ref></span>
<span class="nt"><interceptor-ref</span> <span
class="na">name=</span><span class="s">"coopInterceptor"</span><span
class="nt">></span>
- <span class="nt"><param</span> <span
class="na">name=</span><span class="s">"exemptedPaths"</span><span
class="nt">></param></span>
+ <span class="nt"><param</span> <span
class="na">name=</span><span class="s">"exemptedPaths"</span><span
class="nt">/></span>
<span class="nt"><param</span> <span
class="na">name=</span><span class="s">"mode"</span><span
class="nt">></span>same-origin<span class="nt"></param></span>
<span class="nt"></interceptor-ref></span>
<span class="nt"><interceptor-ref</span> <span
class="na">name=</span><span class="s">"fetchMetadata"</span><span
class="nt">/></span>
diff --git a/output/core-developers/struts-default-xml.html
b/output/core-developers/struts-default-xml.html
index ffee4ac..8d939a1 100644
--- a/output/core-developers/struts-default-xml.html
+++ b/output/core-developers/struts-default-xml.html
@@ -175,8 +175,8 @@ setting in <a
href="struts-properties.html">struts.properties</a>.</p>
and {@link com.opensymphony.xwork2.inject.Inject}
--></span>
<span class="cp"><!DOCTYPE struts PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
- "http://struts.apache.org/dtds/struts-2.5.dtd"></span>
+ "-//Apache Software Foundation//DTD Struts Configuration 2.6//EN"
+ "http://struts.apache.org/dtds/struts-2.6.dtd"></span>
<span class="nt"><struts></span>
@@ -545,10 +545,10 @@ setting in <a
href="struts-properties.html">struts.properties</a>.</p>
<span class="nt"><interceptor-ref</span> <span
class="na">name=</span><span class="s">"coepInterceptor"</span><span
class="nt">></span>
<span class="nt"><param</span> <span
class="na">name=</span><span class="s">"enforcingMode"</span><span
class="nt">></span>false<span class="nt"></param></span>
<span class="nt"><param</span> <span
class="na">name=</span><span class="s">"disabled"</span><span
class="nt">></span>false<span class="nt"></param></span>
- <span class="nt"><param</span> <span
class="na">name=</span><span class="s">"exemptedPaths"</span><span
class="nt">></param></span>
+ <span class="nt"><param</span> <span
class="na">name=</span><span class="s">"exemptedPaths"</span><span
class="nt">/></span>
<span class="nt"></interceptor-ref></span>
<span class="nt"><interceptor-ref</span> <span
class="na">name=</span><span class="s">"coopInterceptor"</span><span
class="nt">></span>
- <span class="nt"><param</span> <span
class="na">name=</span><span class="s">"exemptedPaths"</span><span
class="nt">></param></span>
+ <span class="nt"><param</span> <span
class="na">name=</span><span class="s">"exemptedPaths"</span><span
class="nt">/></span>
<span class="nt"><param</span> <span
class="na">name=</span><span class="s">"mode"</span><span
class="nt">></span>same-origin<span class="nt"></param></span>
<span class="nt"></interceptor-ref></span>
<span class="nt"><interceptor-ref</span> <span
class="na">name=</span><span class="s">"fetchMetadata"</span><span
class="nt">/></span>
diff --git a/output/security/index.html b/output/security/index.html
index 0fae2a6..6b48f83 100644
--- a/output/security/index.html
+++ b/output/security/index.html
@@ -142,6 +142,7 @@
<li><a href="#use-utf-8-encoding"
id="markdown-toc-use-utf-8-encoding">Use UTF-8 encoding</a></li>
<li><a href="#do-not-define-setters-when-not-needed"
id="markdown-toc-do-not-define-setters-when-not-needed">Do not define setters
when not needed</a></li>
<li><a
href="#do-not-use-incoming-values-as-an-input-for-localisation-logic"
id="markdown-toc-do-not-use-incoming-values-as-an-input-for-localisation-logic">Do
not use incoming values as an input for localisation logic</a></li>
+ <li><a
href="#do-not-use-incoming-untrusted-user-input-in-forced-expression-evaluation"
id="markdown-toc-do-not-use-incoming-untrusted-user-input-in-forced-expression-evaluation">Do
not use incoming, untrusted user input in forced expression evaluation</a></li>
<li><a href="#use-struts-tags-instead-of-raw-el-expressions"
id="markdown-toc-use-struts-tags-instead-of-raw-el-expressions">Use Struts tags
instead of raw EL expressions</a></li>
<li><a href="#define-custom-error-pages"
id="markdown-toc-define-custom-error-pages">Define custom error pages</a></li>
<li><a
href="#proactively-protect-from-ognl-expression-injections-attacks-if-easily-applicable"
id="markdown-toc-proactively-protect-from-ognl-expression-injections-attacks-if-easily-applicable">Proactively
protect from OGNL Expression Injections attacks if easily applicable</a>
<ul>
@@ -170,7 +171,7 @@ you should consider during application development with the
Apache Struts 2.</p>
<h3 id="restrict-access-to-the-config-browser-plugin">Restrict access to the
Config Browser Plugin</h3>
<p><a href="../plugins/config-browser/">Config Browser Plugin</a> exposes
internal configuration and should be used only during
-development phase. If you must use it on production site, we strictly
recommend restricting access to it - you can use
+development phase. If you must use it on production site, we strictly
recommend restricting access to it - you can use<br />
Basic Authentication or any other security mechanism (e.g. <a
href="https://shiro.apache.org/">Apache Shiro</a>)</p>
<h3 id="dont-mix-different-access-levels-in-the-same-namespace">Don’t mix
different access levels in the same namespace</h3>
@@ -193,10 +194,10 @@ by security level.</p>
<h3 id="never-expose-jsp-files-directly">Never expose JSP files directly</h3>
<p>You must always hide JSP file behind an action, you cannot allow for direct
access to the JSP files as this can leads
-to unpredictable security vulnerabilities. You can achieve this by putting all
your JSP files under the <code class="highlighter-rouge">WEB-INF</code>
folder</p>
+to unpredictable security vulnerabilities. You can achieve this by putting all
your JSP files under the <code class="highlighter-rouge">WEB-INF</code>
folder</p>
<ul>
- <li>most of the JEE containers restrict access to files placed under the
<code class="highlighter-rouge">WEB-INF</code> folder. Second option is to add
security
-constraint to the <code class="highlighter-rouge">web.xml</code> file:</li>
+ <li>most of the JEE containers restrict access to files placed under the
<code class="highlighter-rouge">WEB-INF</code> folder. Second option is to add
security
+constraint to the <code class="highlighter-rouge">web.xml</code> file:</li>
</ul>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="c"><!-- Restricts access to pure JSP
files - access available only via Struts action --></span>
@@ -221,13 +222,13 @@ constraint to the <code
class="highlighter-rouge">web.xml</code> file:</li>
<h3 id="disable-devmode">Disable devMode</h3>
-<p>The <code class="highlighter-rouge">devMode</code> is a very useful option
during development time, allowing for deep introspection and debugging into you
app.</p>
+<p>The <code class="highlighter-rouge">devMode</code> is a very useful option
during development time, allowing for deep introspection and debugging into you
app.</p>
<p>However, in production it exposes your application to be presenting too
many informations on application’s internals
-or to evaluating risky parameter expressions. Please <strong>always
disable</strong> <code class="highlighter-rouge">devMode</code> before
deploying your application
+or to evaluating risky parameter expressions. Please <strong>always
disable</strong> <code class="highlighter-rouge">devMode</code> before
deploying your application
to a production environment. While it is disabled by default, your
-<code class="highlighter-rouge">struts.xml</code> might include a line setting
it to <code class="highlighter-rouge">true</code>. The best way is to ensure
the following setting is applied
-to our <code class="highlighter-rouge">struts.xml</code> for production
deployment:</p>
+<code class="highlighter-rouge">struts.xml</code> might include a line setting
it to <code class="highlighter-rouge">true</code>. The best way is to ensure
the following setting is applied
+to our <code class="highlighter-rouge">struts.xml</code> for production
deployment:</p>
<div class="language-xml highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="nt"><constant</span> <span
class="na">name =</span><span class="s">"struts.devMode"</span> <span
class="na">value=</span><span class="s">"false"</span> <span
class="nt">/></span>
</code></pre></div></div>
@@ -257,7 +258,7 @@ to our <code class="highlighter-rouge">struts.xml</code>
for production deploym
<h3 id="use-utf-8-encoding">Use UTF-8 encoding</h3>
-<p>Always use <code class="highlighter-rouge">UTF-8</code> encoding when
building an application with the Apache Struts 2, when using JSPs please add
the following
+<p>Always use <code class="highlighter-rouge">UTF-8</code> encoding when
building an application with the Apache Struts 2, when using JSPs please add
the following
header to each JSP file</p>
<pre><code class="language-jsp"><%@ page contentType="text/html;
charset=UTF-8" %>
@@ -267,24 +268,32 @@ header to each JSP file</p>
<p>You should carefully design your actions without exposing anything via
setters and getters, thus can leads to potential
security vulnerabilities. Any action’s setter can be used to set incoming
untrusted user’s value which can contain
-suspicious expression. Some Struts <code
class="highlighter-rouge">Result</code>s automatically populate params based on
values in
+suspicious expression. Some Struts <code
class="highlighter-rouge">Result</code>s automatically populate params based on
values in
<code class="highlighter-rouge">ValueStack</code> (action in most cases is the
root) which means incoming value will be evaluated as an expression during
this process.</p>
<h3 id="do-not-use-incoming-values-as-an-input-for-localisation-logic">Do not
use incoming values as an input for localisation logic</h3>
-<p>All <code class="highlighter-rouge">TextProvider</code>’s <code
class="highlighter-rouge">getText(...)</code> methods (e.g. in<code
class="highlighter-rouge">ActionSupport</code>) perform evaluation of
parameters included in a message
-to properly localize the text. This means using incoming request parameters
with <code class="highlighter-rouge">getText(...)</code> methods is potentially
-dangerous and should be avoided. See example below, assuming that an action
implements getter and setter for property
+<p>All <code class="highlighter-rouge">TextProvider</code>’s <code
class="highlighter-rouge">getText(...)</code> methods (e.g. in<code
class="highlighter-rouge">ActionSupport</code>) perform evaluation of
parameters included in a message
+to properly localize the text. This means using incoming request parameters
with <code class="highlighter-rouge">getText(...)</code> methods is potentially
+dangerous and should be avoided. See example below, assuming that an action
implements getter and setter for property
<code class="highlighter-rouge">message</code>, the below code allows inject
an OGNL expression:</p>
<div class="language-java highlighter-rouge"><div class="highlight"><pre
class="highlight"><code><span class="kd">public</span> <span
class="n">String</span> <span class="nf">execute</span><span
class="o">()</span> <span class="kd">throws</span> <span
class="n">Exception</span> <span class="o">{</span>
- <span class="n">setMessage</span><span class="o">(</span><span
class="n">getText</span><span class="o">(</span><span
class="n">getMessage</span><span class="o">()));</span>
+ <span class="n">message</span> <span class="o">=</span> <span
class="n">getText</span><span class="o">(</span><span
class="n">getMessage</span><span class="o">());</span>
<span class="k">return</span> <span class="n">SUCCESS</span><span
class="o">;</span>
<span class="o">}</span>
</code></pre></div></div>
-<p>Never use value of incoming request parameter as part of your localization
logic.</p>
+<p><strong>Never use value of incoming request parameter as part of your
localization logic.</strong></p>
+
+<h3
id="do-not-use-incoming-untrusted-user-input-in-forced-expression-evaluation">Do
not use incoming, untrusted user input in forced expression evaluation</h3>
+
+<p>You can use a forced expression evalaution in many tags’ attributes by
using <code class="highlighter-rouge">%{...}</code> syntax. This is a very
powerful option
+but used with wrong data can lead to the Remote Code Execution. Never use
forced expression evalaution if you didn’t verify
+the input or it can be passed in by a user.</p>
+
+<p><strong>Never use value of incoming request parameter as input for forced
expression evalaution.</strong></p>
<h3 id="use-struts-tags-instead-of-raw-el-expressions">Use Struts tags instead
of raw EL expressions</h3>
@@ -330,7 +339,7 @@ comprehensively test your app UI and functionalities with
these enabled.</p>
<h4 id="run-ognl-expressions-inside-sandbox">Run OGNL expressions inside
sandbox</h4>
-<p>You can do this simply via adding <code
class="highlighter-rouge">-Dognl.security.manager</code> to JVM arguments. OGNL
thereupon utilizes Java Security
+<p>You can do this simply via adding <code
class="highlighter-rouge">-Dognl.security.manager</code> to JVM arguments. OGNL
thereupon utilizes Java Security
Manager to run OGNL expressions (which includes your actions either!) inside a
sandbox with no permission. It is worth
noting that it affects only OGNL expression execution and thereafter OGNL
reverts Java Security Manager to its previous
state.</p>
@@ -355,7 +364,7 @@ used in JSPs, etc.</p>
<li><code
class="highlighter-rouge">struts.excludedPackageNamePatterns</code> - patterns
used to exclude packages based on RegEx - this option is slower than
simple string comparison but it’s more flexible</li>
<li><code class="highlighter-rouge">struts.excludedPackageNames</code> -
comma-separated list of excluded packages, it is used with simple string
comparison
-via <code class="highlighter-rouge">startWith</code> and <code
class="highlighter-rouge">equals</code></li>
+via <code class="highlighter-rouge">startWith</code> and <code
class="highlighter-rouge">equals</code></li>
</ul>
<p>The defaults are as follow:</p>
@@ -376,8 +385,8 @@ via <code class="highlighter-rouge">startWith</code> and
<code class="highlight
<div class="highlighter-rouge"><div class="highlight"><pre
class="highlight"><code>[WARNING] Target class [class example.MyBean] or
declaring class of member type [public example.MyBean()] are excluded!
</code></pre></div></div>
-<p>In that case <code class="highlighter-rouge">new MyBean()</code> was used
to create a new instance of class (inside JSP) - it’s blocked because <code
class="highlighter-rouge">target</code>
-of such expression is evaluated to <code
class="highlighter-rouge">java.lang.Class</code></p>
+<p>In that case <code class="highlighter-rouge">new MyBean()</code> was used
to create a new instance of class (inside JSP) - it’s blocked because <code
class="highlighter-rouge">target</code>
+of such expression is evaluated to <code
class="highlighter-rouge">java.lang.Class</code></p>
<p>It is possible to redefine the above constants in struts.xml but try to
avoid this and rather change design of your application!</p>
@@ -415,45 +424,68 @@ this was reported as an issue <a
href="https://issues.apache.org/jira/browse/WW-
<p>In such case OGNL cannot properly map which method to call when request is
coming. This is do the OGNL limitation.
To solve the problem don’t use the same method’s names through the hierarchy,
you can simply change the action’s method
-from <code class="highlighter-rouge">save()</code> to <code
class="highlighter-rouge">saveAction()</code> and leaving annotation as is to
allow call this action via <code class="highlighter-rouge">/save.action</code>
request.</p>
+from <code class="highlighter-rouge">save()</code> to <code
class="highlighter-rouge">saveAction()</code> and leaving annotation as is to
allow call this action via <code class="highlighter-rouge">/save.action</code>
request.</p>
<h3 id="accepted--excluded-patterns">Accepted / Excluded patterns</h3>
<p>As from version 2.3.20 the framework provides two new interfaces which are
used to accept / exclude param names
-and values - <a
href="../maven/struts2-core/apidocs/com/opensymphony/xwork2/security/AcceptedPatternsChecker.html">AcceptedPatternsChecker</a>
-and <a
href="../maven/struts2-core/apidocs/com/opensymphony/xwork2/security/ExcludedPatternsChecker.html">ExcludedPatternsChecker</a>
-with default implementations. These two interfaces are used by <a
href="../core-developers/parameters-interceptor.html">Parameters
Interceptor</a>
-and <a href="../core-developers/cookie-interceptor.html">Cookie
Interceptor</a> to check if param can be accepted or must be excluded.
-If you were using <code class="highlighter-rouge">excludeParams</code>
previously please compare patterns used by you with these provided by the
framework in default implementation.</p>
+and values - <a
href="../maven/struts2-core/apidocs/com/opensymphony/xwork2/security/AcceptedPatternsChecker.html">AcceptedPatternsChecker</a>
+and <a
href="../maven/struts2-core/apidocs/com/opensymphony/xwork2/security/ExcludedPatternsChecker.html">ExcludedPatternsChecker</a>
+with default implementations. These two interfaces are used by <a
href="../core-developers/parameters-interceptor.html">Parameters
Interceptor</a>
+and <a href="../core-developers/cookie-interceptor.html">Cookie
Interceptor</a> to check if param can be accepted or must be excluded.
+If you were using <code class="highlighter-rouge">excludeParams</code>
previously please compare patterns used by you with these provided by the
framework in default implementation.</p>
<h3 id="strict-method-invocation">Strict Method Invocation</h3>
<p>This mechanism was introduced in version 2.5. It allows control what
methods can be accessed with the bang “!” operator
via <a
href="../core-developers/action-configuration.html#dynamic-method-invocation">Dynamic
Method Invocation</a>. Please read
-more in the Strict Method Invocation section of <a
href="../core-developers/action-configuration.html">Action
Configuration</a>.</p>
+more in the Strict Method Invocation section of <a
href="../core-developers/action-configuration.html">Action
Configuration</a>.</p>
<h3 id="resource-isolation-using-fetch-metadata">Resource Isolation Using
Fetch Metadata</h3>
-<p>Fetch Metadata is a mitigation against common cross origin attacks such as
Cross-Site Request Forgery (CSRF). It is a web platform security feature
designed to help servers defend themselves against cross-origin attacks based
on the preferred resource isolation policy. The browser provides information
about the context of an HTTP request in a set of <code
class="highlighter-rouge">Sec-Fetch-*</code> headers. This allows the server
processing the request to make decisions on whether t [...]
+<p>Fetch Metadata is a mitigation against common cross origin attacks such as
Cross-Site Request Forgery (CSRF). It is
+a web platform security feature designed to help servers defend themselves
against cross-origin attacks based
+on the preferred resource isolation policy. The browser provides information
about the context of an HTTP request
+in a set of <code class="highlighter-rouge">Sec-Fetch-*</code> headers. This
allows the server processing the request to make decisions on whether the
request
+should be accepted or rejected based on the available resource isolation
policies.</p>
-<p>A Resource Isolation Policy prevents the resources on a server from being
requested by external websites. This policy can be enabled for all endpoints of
the application or the endpoints that are meant to be loaded in a cross-site
context can be exempted from applying the policy. Read more about Fetch
Metadata and resource isolation <a
href="https://web.dev/fetch-metadata/">here</a>.</p>
+<p>A Resource Isolation Policy prevents the resources on a server from being
requested by external websites. This policy
+can be enabled for all endpoints of the application or the endpoints that are
meant to be loaded in a cross-site context
+can be exempted from applying the policy. Read more about Fetch Metadata and
resource isolation <a href="https://web.dev/fetch-metadata/">here</a>.</p>
-<p>This mechanism is implemented in Struts using the <a
href="../core-developers/fetch-metadata-interceptor.html">FetchMetadata
Interceptor</a>. Refer to the documentation for <a
href="../core-developers/fetch-metadata-interceptor.html">FetchMetadata
Interceptor</a> instructions on how to enable Fetch Metadata.</p>
+<p>This mechanism is implemented in Struts using the <a
href="../core-developers/fetch-metadata-interceptor.html">FetchMetadata
Interceptor</a>.
+ Refer to the documentation for <a
href="../core-developers/fetch-metadata-interceptor.html">FetchMetadata
Interceptor</a>
+ instructions on how to enable Fetch Metadata.</p>
<h3 id="cross-origin-isolation-with-coop-and-coep">Cross Origin Isolation with
COOP and COEP</h3>
-<p><a
href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy">Cross-Origin
Opener Policy</a> is a security mitigation that lets developers isolate their
resources against side-channel attacks and information leaks. The COOP response
header allows a document to request a new browsing context group to better
isolate itself from other untrustworthy origins.</p>
+<blockquote>
+ <p>Note: since Struts 2.6.</p>
+</blockquote>
+
+<p><a
href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Opener-Policy">Cross-Origin
Opener Policy</a> is
+a security mitigation that lets developers isolate their resources against
side-channel attacks and information leaks.
+The COOP response header allows a document to request a new browsing context
group to better isolate itself from other
+untrustworthy origins.</p>
-<p><a
href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy">Cross-Origin
Embedder Policy</a> prevents a document from loading any cross-origin
resources which don’t explicitly grant the document permission to be loaded.</p>
+<p><a
href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cross-Origin-Embedder-Policy">Cross-Origin
Embedder Policy</a>
+prevents a document from loading any cross-origin resources which don’t
explicitly grant the document permission to be loaded.</p>
-<p>COOP and COEP are independent mechanisms that can be enabled, tested and
deployed separately. While enabling one doesn’t require developers to enable
the other, when set together COOP and COEP allows developers to use powerful
features (such as <code class="highlighter-rouge">SharedArrayBuffer</code>,
<code class="highlighter-rouge">performance.measureMemory()</code> and the JS
Self-Profiling API) securely, without worrying about side channel attacks like
<a href="https://meltdownatta [...]
+<p>COOP and COEP are independent mechanisms that can be enabled, tested and
deployed separately. While enabling one doesn’t
+require developers to enable the other, when set together COOP and COEP allows
developers to use powerful features (such
+as <code class="highlighter-rouge">SharedArrayBuffer</code>, <code
class="highlighter-rouge">performance.measureMemory()</code> and the JS
Self-Profiling API) securely, without worrying about
+side channel attacks like <a href="https://meltdownattack.com/">Spectre</a>.
+Further reading on <a
href="https://docs.google.com/document/d/1zDlfvfTJ_9e8Jdc8ehuV4zMEu9ySMCiTGMS9y0GU92k/edit#bookmark=id.uo6kivyh0ge2">COOP/COEP</a>
+and <a href="https://web.dev/why-coop-coep/">why you need cross-origin
isolation</a>.</p>
<p>The recommended configuration for the policies are:</p>
+
<div class="highlighter-rouge"><div class="highlight"><pre
class="highlight"><code>Cross-Origin-Embedder-Policy: require-corp;
Cross-Origin-Opener-Policy: same-origin;
</code></pre></div></div>
-<p>COOP and COEP are implemented in Struts using <a
href="../core-developers/coop-interceptor.html">CoopInterceptor</a> and <a
href="../core-developers/coep-interceptor.html">CoepInterceptor</a>.</p>
+<p>COOP and COEP are implemented in Struts using <a
href="../core-developers/coop-interceptor.html">CoopInterceptor</a>
+and <a href="../core-developers/coep-interceptor.html">CoepInterceptor</a>.</p>
</section>
</article>