fix: XSS — _esc() для o.operation в instances.js (v1.2.40)
Результат код-ревью #1 (критическое): o.operation вставлялся в onclick и innerHTML без экранирования. Исправлено: JS-escape для onclick (\\, \'), HTML-escape для текста.
This commit is contained in:
@@ -143,9 +143,13 @@ async function toggleInstance(iuid){
|
||||
}
|
||||
|
||||
// Кнопки операций с цветовой маркировкой
|
||||
opsEl.innerHTML=ops.map(o=>
|
||||
`<button class="btn btn-sm op-btn ${opClass(o.operation)}" onclick="runOp('${o.operation}',${o.svcOperationId})">${o.operation}</button>`
|
||||
).join('');
|
||||
// o.operation в onclick — JS-escape: \ → \\, ' → \'
|
||||
// o.operation в тексте кнопки — HTML-escape через _esc()
|
||||
opsEl.innerHTML=ops.map(o=>{
|
||||
const escOp = _esc(o.operation);
|
||||
const jsOp = o.operation.replace(/\\/g,'\\\\').replace(/'/g,"\\'");
|
||||
return `<button class="btn btn-sm op-btn ${opClass(o.operation)}" onclick="runOp('${jsOp}',${o.svcOperationId})">${escOp}</button>`;
|
||||
}).join('');
|
||||
opsEl.classList.add('open');
|
||||
}catch(e){
|
||||
opsEl.innerHTML='<span style="color:var(--destructive);font-size:11px;">Ошибка загрузки</span>';
|
||||
|
||||
Reference in New Issue
Block a user