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'];
|
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() {
|
function loadCustomApps() {
|
||||||
try {
|
try {
|
||||||
|
|
@ -1147,21 +1152,21 @@ function renderApps() {
|
||||||
const isInitial = app.icon === '_initial';
|
const isInitial = app.icon === '_initial';
|
||||||
|
|
||||||
const iconHTML = isInitial
|
const iconHTML = isInitial
|
||||||
? `<div class="app-initial" style="background:${color}22;color:${color}">${app.label.charAt(0).toUpperCase()}</div>`
|
? `<div class="app-initial" style="background:${color}22;color:${color}">${esc(app.label).charAt(0).toUpperCase()}</div>`
|
||||||
: `<i data-lucide="${app.icon}" class="app-icon" style="stroke:${color}"></i>`;
|
: `<i data-lucide="${esc(app.icon)}" class="app-icon" style="stroke:${color}"></i>`;
|
||||||
|
|
||||||
const delBtn = isCustom
|
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 `
|
return `
|
||||||
<div class="app-item${editCls}${hidden}"
|
<div class="app-item${editCls}${hidden}"
|
||||||
data-id="${app.id}" role="button" tabindex="0"
|
data-id="${app.id}" role="button" tabindex="0"
|
||||||
aria-label="${app.label}"
|
aria-label="${esc(app.label)}"
|
||||||
style="${bgStyle}">
|
style="${bgStyle}">
|
||||||
${delBtn}
|
${delBtn}
|
||||||
${iconHTML}
|
${iconHTML}
|
||||||
<span class="app-label">${app.label}</span>
|
<span class="app-label">${esc(app.label)}</span>
|
||||||
<span class="check-badge" aria-hidden="true"
|
<span class="check-badge" aria-hidden="true"
|
||||||
style="background:${color}">
|
style="background:${color}">
|
||||||
<i data-lucide="check"
|
<i data-lucide="check"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue