Skip to content

Commit bdb09fd

Browse files
add default enforced Content Security Policy (#135)
* add default csp.enforce block and ability to load an optional.application.properties * remove CSP_REPORT and CSP_ENFORCE; update README * add wiring for optional app properties file from s3 * update to match what's currently deployed * Update README.md Co-authored-by: labkey-stuartm <[email protected]> --------- Co-authored-by: labkey-stuartm <[email protected]>
1 parent b3044f1 commit bdb09fd

File tree

6 files changed

+37
-20
lines changed

6 files changed

+37
-20
lines changed

Dockerfile

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,6 @@ ENV CERT_C="US" \
8989
CERT_OU="IT" \
9090
CERT_CN="localhost" \
9191
\
92-
CSP_REPORT= \
93-
CSP_ENFORCE= \
94-
\
9592
SMTP_HOST="localhost" \
9693
SMTP_USER="root" \
9794
SMTP_PORT="25" \

README.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,13 @@ This repo contains a Dockerfile, `docker-compose.yml`, and various other files f
66

77
This repo is a work in progress. Containers created from these sources are untested. Until further work is done, integrations with LabKey products that traditionally have relied on OS configuration such as R reports or Python scripts will **NOT** work.
88

9+
## Content Security Policy
10+
February 2025 brings an enforced Content Security Policy enabled by default, the same one that LabKey uses in most if not all deployments, and is highly recommended to be left in place. It can, however, be disabled by enabling the `ExperimentalFeature.disableEnforceCsp` startup property.
11+
12+
The policy itself can be overriden with an `optional.application.properties` file.
13+
14+
CSP_REPORT and CSP_ENFORCE environment variables have been removed.
15+
916
## Upgrading from 23.11 to 24.3
1017
March 2024 saw [many changes](https://github.com/LabKey/Dockerfile/commits/24.3.0) in an effort to bring this repo in line with LabKey server versioning/releases, starting with v24.3, in which the embedded tomcat version has been upgraded from 9 to 10.
1118

application.properties

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,3 +162,21 @@ info.labkey.distribution=${LABKEY_DISTRIBUTION}
162162
server.tomcat.max-threads=50
163163
server.servlet.session.timeout=60m
164164
context.workDirLocation=/work/Tomcat/localhost
165+
166+
## START OF CSP ENFORCE BLOCK (DO NOT CHANGE THIS TEXT)
167+
csp.enforce=\
168+
default-src 'self' https: ;\
169+
connect-src 'self' ${LABKEY.ALLOWED.CONNECTIONS} ;\
170+
object-src 'none' ;\
171+
style-src 'self' https: 'unsafe-inline' ;\
172+
img-src 'self' https: data: ;\
173+
font-src 'self' data: ;\
174+
script-src 'self' 'unsafe-eval' 'strict-dynamic' 'nonce-${REQUEST.SCRIPT.NONCE}' ;\
175+
base-uri 'self' ;\
176+
upgrade-insecure-requests ;\
177+
frame-ancestors 'self' ;\
178+
report-uri https://www.labkey.org/admin-contentsecuritypolicyreport.api?${CSP.REPORT.PARAMS} ;
179+
## END OF CSP ENFORCE BLOCK (DO NOT CHANGE THIS TEXT)
180+
181+
## Load optional application.properties if file exists - used for one-off labkey cloud use cases etc.
182+
spring.config.import=optional:file:${LABKEY_HOME}/config/optional.application.properties

docker-compose.yml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ services:
8080
- POSTGRES_VALIDATION_QUERY=${POSTGRES_VALIDATION_QUERY:-SELECT 1}
8181

8282
- LABKEY_CUSTOM_PROPERTIES_S3_URI=${LABKEY_CUSTOM_PROPERTIES_S3_URI}
83+
- LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI=${LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI}
8384
- LABKEY_DEFAULT_PROPERTIES_S3_URI=${LABKEY_DEFAULT_PROPERTIES_S3_URI}
8485
- LOG4J_CONFIG_FILE=${LOG4J_CONFIG_FILE-log4j2.xml}
8586
- JSON_OUTPUT=${JSON_OUTPUT-false}
@@ -192,6 +193,7 @@ services:
192193
- POSTGRES_VALIDATION_QUERY=${POSTGRES_VALIDATION_QUERY:-SELECT 1}
193194

194195
- LABKEY_CUSTOM_PROPERTIES_S3_URI=${LABKEY_CUSTOM_PROPERTIES_S3_URI}
196+
- LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI=${LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI}
195197
- LABKEY_DEFAULT_PROPERTIES_S3_URI=${LABKEY_DEFAULT_PROPERTIES_S3_URI}
196198
- LOG4J_CONFIG_FILE=${LOG4J_CONFIG_FILE-log4j2.xml}
197199
- JSON_OUTPUT=${JSON_OUTPUT-false}
@@ -302,6 +304,7 @@ services:
302304
- POSTGRES_VALIDATION_QUERY=${POSTGRES_VALIDATION_QUERY:-SELECT 1}
303305

304306
- LABKEY_CUSTOM_PROPERTIES_S3_URI=${LABKEY_CUSTOM_PROPERTIES_S3_URI}
307+
- LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI=${LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI}
305308
- LABKEY_DEFAULT_PROPERTIES_S3_URI=${LABKEY_DEFAULT_PROPERTIES_S3_URI}
306309
- LOG4J_CONFIG_FILE=${LOG4J_CONFIG_FILE-log4j2.xml}
307310
- JSON_OUTPUT=${JSON_OUTPUT-false}
@@ -377,9 +380,6 @@ services:
377380
- MAX_JVM_RAM_PERCENT=${MAX_JVM_RAM_PERCENT:-75.0}
378381
- JAVA_PRE_JAR_EXTRA=-XX:+UseSerialGC -Xss512k
379382

380-
- CSP_REPORT=${CSP_REPORT:-}
381-
- CSP_ENFORCE=${CSP_ENFORCE:-}
382-
383383
# - SMTP_HOST=mailhog
384384
# - SMTP_PORT=1025
385385

@@ -416,6 +416,7 @@ services:
416416
- POSTGRES_VALIDATION_QUERY=${POSTGRES_VALIDATION_QUERY:-SELECT 1}
417417

418418
- LABKEY_CUSTOM_PROPERTIES_S3_URI=${LABKEY_CUSTOM_PROPERTIES_S3_URI}
419+
- LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI=${LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI}
419420
- LABKEY_DEFAULT_PROPERTIES_S3_URI=${LABKEY_DEFAULT_PROPERTIES_S3_URI}
420421
- LOG4J_CONFIG_FILE=${LOG4J_CONFIG_FILE-log4j2.xml}
421422
- JSON_OUTPUT=${JSON_OUTPUT-false}

entrypoint.sh

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ keystore_alias="${TOMCAT_KEYSTORE_ALIAS:-}"
1212
keystore_format="${TOMCAT_KEYSTORE_FORMAT:-}"
1313

1414
LABKEY_CUSTOM_PROPERTIES_S3_URI="${LABKEY_CUSTOM_PROPERTIES_S3_URI:=none}"
15+
LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI="${LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI:=none}"
1516
LABKEY_DEFAULT_PROPERTIES_S3_URI="${LABKEY_DEFAULT_PROPERTIES_S3_URI:=none}"
1617

1718
# set below to 'labkeywebapp/WEB-INF/classes/log4j2.xml' to use embedded tomcat version from the built .jar
@@ -20,10 +21,6 @@ LOG4J_CONFIG_FILE="${LOG4J_CONFIG_FILE:=log4j2.xml}"
2021
# below assumes using local log4j2.xml file, as the embedded version is not available for edits until after server is running
2122
JSON_OUTPUT="${JSON_OUTPUT:-false}"
2223

23-
# Content Security Policy settings
24-
CSP_REPORT="${CSP_REPORT:-}"
25-
CSP_ENFORCE="${CSP_ENFORCE:-}"
26-
2724
# for ecs/datadog, optionally enable APM and JMX metrics
2825
DD_COLLECT_APM="${DD_COLLECT_APM:-false}"
2926
JAVA_RMI_SERVER_HOSTNAME="${JAVA_RMI_SERVER_HOSTNAME:-}"
@@ -145,6 +142,11 @@ main() {
145142
awsclibin/aws s3 cp $LABKEY_CUSTOM_PROPERTIES_S3_URI startup/
146143
fi
147144

145+
if [ $LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI != 'none' ]; then
146+
echo "trying to s3 cp '$LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI'"
147+
awsclibin/aws s3 cp $LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI config/
148+
fi
149+
148150
echo "sleeping for $SLEEP seconds..."
149151
sleep $SLEEP
150152

@@ -212,15 +214,6 @@ main() {
212214
sed -i "s/@@jdbcUser@@/${POSTGRES_USER:-postgres}/" config/application.properties
213215
sed -i "s/@@jdbcPassword@@/${POSTGRES_PASSWORD:-}/" config/application.properties
214216

215-
# note: leave newlines out of CSP_REPORT/ENFORCE env vars
216-
# ex: "default-src 'self' https: ; connect-src 'self' https: ; ...""
217-
if [ -n "$CSP_REPORT" ]; then
218-
echo "csp.report=$CSP_REPORT\n" >> config/application.properties
219-
fi
220-
if [ -n "$CSP_ENFORCE" ]; then
221-
echo "csp.enforce=$CSP_ENFORCE\n" >> config/application.properties
222-
fi
223-
224217
sed -i "s/@@smtpHost@@/${SMTP_HOST}/" config/application.properties
225218
sed -i "s/@@smtpUser@@/${SMTP_USER}/" config/application.properties
226219
sed -i "s/@@smtpPort@@/${SMTP_PORT}/" config/application.properties
@@ -261,7 +254,7 @@ main() {
261254
fi
262255

263256
echo "Purging secrets and other bits from environment variables..."
264-
unset POSTGRES_USER POSTGRES_PASSWORD POSTGRES_HOST POSTGRES_PORT POSTGRES_DB POSTGRES_PARAMETERS CSP_REPORT CSP_ENFORCE
257+
unset POSTGRES_USER POSTGRES_PASSWORD POSTGRES_HOST POSTGRES_PORT POSTGRES_DB POSTGRES_PARAMETERS
265258
unset SMTP_HOST SMTP_USER SMTP_PORT SMTP_PASSWORD SMTP_AUTH SMTP_FROM SMTP_STARTTLS
266259
unset LABKEY_CREATE_INITIAL_USER LABKEY_CREATE_INITIAL_USER_APIKEY LABKEY_INITIAL_USER_APIKEY LABKEY_INITIAL_USER_EMAIL LABKEY_INITIAL_USER_GROUP LABKEY_INITIAL_USER_ROLE
267260
unset LABKEY_EK SLEEP CONTAINER_PRIVATE_IP

quickstart_envs.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,4 @@ export LABKEY_CREATE_INITIAL_USER_APIKEY=""
1818

1919
export LABKEY_DEFAULT_PROPERTIES_S3_URI="none"
2020
export LABKEY_CUSTOM_PROPERTIES_S3_URI="none"
21+
export LABKEY_OPTIONAL_APP_PROPERTIES_S3_URI="none"

0 commit comments

Comments
 (0)