diff --git a/src/platform/workflow/templates/composables/useTemplateUrlLoader.ts b/src/platform/workflow/templates/composables/useTemplateUrlLoader.ts index 0305acaf7..0d3d3a4ac 100644 --- a/src/platform/workflow/templates/composables/useTemplateUrlLoader.ts +++ b/src/platform/workflow/templates/composables/useTemplateUrlLoader.ts @@ -33,9 +33,11 @@ export function useTemplateUrlLoader() { /** * Validates parameter format to prevent path traversal and injection attacks + * Allows: letters, numbers, underscores, hyphens, and dots (for version numbers) + * Blocks: path separators (/, \), special chars that could enable injection */ const isValidParameter = (param: string): boolean => { - return /^[a-zA-Z0-9_-]+$/.test(param) + return /^[a-zA-Z0-9_.-]+$/.test(param) } /** diff --git a/tests-ui/tests/platform/workflow/templates/composables/useTemplateUrlLoader.test.ts b/tests-ui/tests/platform/workflow/templates/composables/useTemplateUrlLoader.test.ts index 650fa817c..7cd9453f6 100644 --- a/tests-ui/tests/platform/workflow/templates/composables/useTemplateUrlLoader.test.ts +++ b/tests-ui/tests/platform/workflow/templates/composables/useTemplateUrlLoader.test.ts @@ -187,7 +187,8 @@ describe('useTemplateUrlLoader', () => { 'flux_simple', 'flux-kontext-dev', 'template123', - 'My_Template-2' + 'My_Template-2', + 'templates-1_click_multiple_scene_angles-v1.0' // template with version number containing dot ] for (const template of validTemplates) {