bug6101: use CORS filter origins also for Content-Security-Policy (CSP) frame-ancestors

This commit is contained in:
Axel Uhl
2025-03-13 16:32:25 +01:00
parent 0c6498939c
commit 93b5af3e57
15 changed files with 161 additions and 47 deletions
@@ -21,6 +21,7 @@ import org.osgi.framework.BundleContext;
import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.http.HttpHeaderUtil;
import com.sap.sse.common.mail.MailException;
import com.sap.sse.replication.ReplicableWithObjectInputStream;
import com.sap.sse.security.impl.ReplicableSecurityService;
@@ -851,8 +852,11 @@ public interface SecurityService extends ReplicableWithObjectInputStream<Replica
* @param allowedOrigins
* the origins, including their scheme (e.g., {@code https://www.example.com}) from which REST requests
* coming from that browser origin are to be permitted; {@code null} is handled like an empty array
* @throws IllegalArgumentException
* in case any of the {@code allowedOrigins} does not fulfill the criteria of
* {@link HttpHeaderUtil#isValidOriginHeaderValue(String)}.
*/
void setCORSFilterConfigurationAllowedOrigins(String serverName, String... allowedOrigins);
void setCORSFilterConfigurationAllowedOrigins(String serverName, String... allowedOrigins) throws IllegalArgumentException;
Pair<Boolean, Set<String>> getCORSFilterConfiguration(String serverName);
}
@@ -84,6 +84,7 @@ import org.scribe.oauth.OAuthService;
import com.sap.sse.ServerInfo;
import com.sap.sse.common.Util;
import com.sap.sse.common.Util.Pair;
import com.sap.sse.common.http.HttpHeaderUtil;
import com.sap.sse.common.mail.MailException;
import com.sap.sse.concurrent.LockUtil;
import com.sap.sse.concurrent.NamedReentrantReadWriteLock;
@@ -2234,7 +2235,12 @@ implements ReplicableSecurityService, ClearStateTestSupport {
}
@Override
public void setCORSFilterConfigurationAllowedOrigins(String serverName, String... allowedOrigins) {
public void setCORSFilterConfigurationAllowedOrigins(String serverName, String... allowedOrigins) throws IllegalArgumentException {
for (final String allowedOrigin : allowedOrigins) {
if (!HttpHeaderUtil.isValidOriginHeaderValue(allowedOrigin)) {
throw new IllegalArgumentException("\""+allowedOrigin+"\" is not a valid format for a CORS origin");
}
}
apply(s->s.internalSetCORSFilterConfigurationAllowedOrigins(serverName, allowedOrigins));
}