diff --git a/api/src/org/labkey/api/action/SimpleViewAction.java b/api/src/org/labkey/api/action/SimpleViewAction.java index 5a9c1cb964a..f669e66838a 100644 --- a/api/src/org/labkey/api/action/SimpleViewAction.java +++ b/api/src/org/labkey/api/action/SimpleViewAction.java @@ -16,6 +16,7 @@ package org.labkey.api.action; +import org.jetbrains.annotations.NotNull; import org.labkey.api.miniprofiler.MiniProfiler; import org.labkey.api.miniprofiler.Timing; import org.labkey.api.view.BadRequestException; @@ -134,7 +135,7 @@ public ModelAndView getPrintView(FORM form, BindException errors) throws Excepti } @Override - public void validate(Object target, Errors errors) + public void validate(@NotNull Object target, @NotNull Errors errors) { } } diff --git a/api/src/org/labkey/api/data/ColumnInfo.java b/api/src/org/labkey/api/data/ColumnInfo.java index f3457a0ee7e..aee4c8880c3 100644 --- a/api/src/org/labkey/api/data/ColumnInfo.java +++ b/api/src/org/labkey/api/data/ColumnInfo.java @@ -134,7 +134,7 @@ static int findColumn(ResultSet rs, String name) * new SQLFragment().append(col.getValueSql("R")).append(" AS ").appendIdentifier(col.getAlias()) * The returned ResultSet will contain a column named col.getAlias() * - * NOTE: if you directly bind your results using BeanObjectFactory (e.g. TableSelector.getArrayList(MyClass.class)) + * NOTE: if you directly bind your results using BeanObjectFactory (e.g., TableSelector.getArrayList(MyClass.class)) * you should * a) match your column aliases to the bean properties you want to populate * b) prefer using TableSelector vs SqlSelector. TableSelector will use ColumnInfo.getAlias(). diff --git a/api/src/org/labkey/api/reports/report/r/view/HtmlOutput.java b/api/src/org/labkey/api/reports/report/r/view/HtmlOutput.java index e682379b4ff..40a23b1a927 100644 --- a/api/src/org/labkey/api/reports/report/r/view/HtmlOutput.java +++ b/api/src/org/labkey/api/reports/report/r/view/HtmlOutput.java @@ -94,7 +94,7 @@ public HtmlOutputView(ParamReplacement param, String label) protected String renderInternalAsString(File file) throws Exception { if (exists(file)) - return PageFlowUtil.getFileContentsAsString(file); + return PageFlowUtil.addScriptNonces(PageFlowUtil.getFileContentsAsString(file)); return null; } diff --git a/api/src/org/labkey/api/security/Directive.java b/api/src/org/labkey/api/security/Directive.java index 22c9d645f50..dcc8a9ac416 100644 --- a/api/src/org/labkey/api/security/Directive.java +++ b/api/src/org/labkey/api/security/Directive.java @@ -5,7 +5,7 @@ /** * All CSP directives that support substitutions. These constant names are persisted to the database, so be careful with - * any changes. If adding a Directive, make sure to add the corresponding substitutions to application.properties. + * any changes. If adding a Directive, make sure to add the corresponding substitutions in LabKeyServer baseCsp. */ public enum Directive implements StartupProperty, SafeToRenderEnum { @@ -13,6 +13,7 @@ public enum Directive implements StartupProperty, SafeToRenderEnum Font("font-src", "Sources for fonts"), Frame("frame-src", "Sources for iframes"), Image("image-src", "Sources for images"), + Object("object-src", "Sources for objects"), // Issue 53226 Style("style-src", "Sources for stylesheets"); private final String _cspDirective; diff --git a/api/src/org/labkey/api/security/SecurityManager.java b/api/src/org/labkey/api/security/SecurityManager.java index af804bcd319..803153481a7 100644 --- a/api/src/org/labkey/api/security/SecurityManager.java +++ b/api/src/org/labkey/api/security/SecurityManager.java @@ -236,7 +236,7 @@ public static void registerAllowedConnectionSource(String key, String serviceURL { if (StringUtils.trimToNull(serviceURL) == null) { - ContentSecurityPolicyFilter.unregisterAllowedSources(Directive.Connection, key); + ContentSecurityPolicyFilter.unregisterAllowedSources(key, Directive.Connection); LOG.trace(String.format("Unregistered [%1$s] as an allowed connection source", key)); return; } diff --git a/api/src/org/labkey/api/util/PageFlowUtil.java b/api/src/org/labkey/api/util/PageFlowUtil.java index 2a961c70986..f071aea5a61 100644 --- a/api/src/org/labkey/api/util/PageFlowUtil.java +++ b/api/src/org/labkey/api/util/PageFlowUtil.java @@ -3156,4 +3156,51 @@ public static HtmlString getDataRegionHtmlForPropertyValues(Map return HtmlString.unsafe(sb.toString()); } + /** + * Convert String containing HTML into a Document, add nonces to all {@code