Context
2.0.0 Batch Transfer lets a user supply a custom DicomEdit script per Reimport by forwarding
it as the xnat-web importer param GradualDicomImporter.ANON_SCRIPT_PARAM ("Anon-Script")
(importExperiment → params.put("Anon-Script", …) → DicomZipImporter; plugin only forwards,
apply lives in xnat-web ~1.9.3.5, feature-detected via TransferCapabilitiesService). This spike
decides whether to build on that param.
Goal 1 — Is the param sufficient?
Goal 2 — Security concerns & mitigations
User-supplied scripts promote anon authorship from admins to any reimporting user, run in the XNAT JVM. Assess + mitigate:
Recommended guardrails already drafted in docs/2.0.0-anon-thread-safety.md (Phase 1B) and docs/2.0.0-implementation-plan.md.
Deliverables
- Findings on Goal 1 (sufficient? gaps?) and Goal 2 (threats → mitigations, plugin-side vs upstream xnat-web).
- Go/no-go on
Anon-Script as-is, minimum guardrails before enabling, and whether to ship admin-gated first.
References
docs/2.0.0-anon-thread-safety.md, docs/2.0.0-implementation-plan.md, docs/2.0.0-rest-api.md, docs/2.0.0-anon-script-pathway.html; xnat-web GradualDicomImporter.ANON_SCRIPT_PARAM (≈1.9.3.5); TransferCapabilitiesService.
Context
2.0.0 Batch Transfer lets a user supply a custom DicomEdit script per Reimport by forwarding
it as the xnat-web importer param
GradualDicomImporter.ANON_SCRIPT_PARAM("Anon-Script")(
importExperiment→params.put("Anon-Script", …)→DicomZipImporter; plugin only forwards,apply lives in xnat-web ~1.9.3.5, feature-detected via
TransferCapabilitiesService). This spikedecides whether to build on that param.
Goal 1 — Is the param sufficient?
Anon-Scriptis actually applied on the inline (action=commit) Reimport path, not ignored.versionheader is required.Goal 2 — Security concerns & mitigations
User-supplied scripts promote anon authorship from admins to any reimporting user, run in the XNAT JVM. Assess + mitigate:
getURL(SSRF),alterPixels(DoS),newUID(breaks UID refs) → reject.mapUID/mapReferencedUIDs/lookup— non-thread-safe under concurrent reimports (seedocs/2.0.0-anon-thread-safety.md) → reject; steer tohashUID.Recommended guardrails already drafted in
docs/2.0.0-anon-thread-safety.md(Phase 1B) anddocs/2.0.0-implementation-plan.md.Deliverables
Anon-Scriptas-is, minimum guardrails before enabling, and whether to ship admin-gated first.References
docs/2.0.0-anon-thread-safety.md,docs/2.0.0-implementation-plan.md,docs/2.0.0-rest-api.md,docs/2.0.0-anon-script-pathway.html; xnat-webGradualDicomImporter.ANON_SCRIPT_PARAM(≈1.9.3.5);TransferCapabilitiesService.