diff --git a/web_interface/static/v3/plugins_manager.js b/web_interface/static/v3/plugins_manager.js index 4c1c1c2d..2f13ac25 100644 --- a/web_interface/static/v3/plugins_manager.js +++ b/web_interface/static/v3/plugins_manager.js @@ -3012,18 +3012,18 @@ function generateFieldHtml(key, prop, value, prefix = '') { enumItems.forEach((option) => { const isChecked = arrayValue.includes(option); const label = labels[option] || option.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase()); - const checkboxId = `${fieldId}_${option}`; + const checkboxId = `${fieldId}_${escapeHtml(option)}`; html += ` `; }); @@ -3092,7 +3092,7 @@ function generateFieldHtml(key, prop, value, prefix = '') { const propSchema = itemProperties[propKey]; const propValue = item[propKey] !== undefined ? item[propKey] : propSchema.default; const propLabel = propSchema.title || propKey.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase()); - html += `
`; + html += `
`; if (propSchema.type === 'boolean') { const checked = propValue ? 'checked' : ''; html += ``; @@ -6497,7 +6497,7 @@ if (typeof window !== 'undefined') { const propSchema = itemsSchema.properties[propKey]; const propValue = newItem[propKey] !== undefined ? newItem[propKey] : propSchema.default; const propLabel = propSchema.title || propKey.replace(/_/g, ' ').replace(/\b\w/g, l => l.toUpperCase()); - itemHtml += `
`; + itemHtml += `
`; if (propSchema.type === 'boolean') { const checked = propValue ? 'checked' : ''; // No name attribute - rely solely on _data field to prevent key leakage