fix: add esc() and sanitize app.label in innerHTML
This commit is contained in:
parent
4dd291a5f8
commit
eeaa812aa7
15
index.html
15
index.html
|
|
@ -973,6 +973,11 @@ const CAT_LABELS = {
|
|||
|
||||
const CAT_ORDER = ['posimai','sns','media','news','tools','nav','shop'];
|
||||
|
||||
// ── HTML エスケープ ─────────────────────────────────────────
|
||||
function esc(s) {
|
||||
return String(s ?? '').replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>').replace(/"/g,'"').replace(/'/g,''');
|
||||
}
|
||||
|
||||
// ── カスタムアプリ ──────────────────────────────────────────
|
||||
function loadCustomApps() {
|
||||
try {
|
||||
|
|
@ -1147,21 +1152,21 @@ function renderApps() {
|
|||
const isInitial = app.icon === '_initial';
|
||||
|
||||
const iconHTML = isInitial
|
||||
? `<div class="app-initial" style="background:${color}22;color:${color}">${app.label.charAt(0).toUpperCase()}</div>`
|
||||
: `<i data-lucide="${app.icon}" class="app-icon" style="stroke:${color}"></i>`;
|
||||
? `<div class="app-initial" style="background:${color}22;color:${color}">${esc(app.label).charAt(0).toUpperCase()}</div>`
|
||||
: `<i data-lucide="${esc(app.icon)}" class="app-icon" style="stroke:${color}"></i>`;
|
||||
|
||||
const delBtn = isCustom
|
||||
? `<button class="custom-del-btn" data-del-id="${app.id}" aria-label="${app.label}を削除">✕</button>`
|
||||
? `<button class="custom-del-btn" data-del-id="${app.id}" aria-label="${esc(app.label)}を削除">✕</button>`
|
||||
: '';
|
||||
|
||||
return `
|
||||
<div class="app-item${editCls}${hidden}"
|
||||
data-id="${app.id}" role="button" tabindex="0"
|
||||
aria-label="${app.label}"
|
||||
aria-label="${esc(app.label)}"
|
||||
style="${bgStyle}">
|
||||
${delBtn}
|
||||
${iconHTML}
|
||||
<span class="app-label">${app.label}</span>
|
||||
<span class="app-label">${esc(app.label)}</span>
|
||||
<span class="check-badge" aria-hidden="true"
|
||||
style="background:${color}">
|
||||
<i data-lucide="check"
|
||||
|
|
|
|||
Loading…
Reference in New Issue