DOM-based test cases — JavaScript injection (taint)
High: 0Medium: 0Low: 0Safe: 0Total: 0
This fixture exercises every sink from the javascript-injection-taint rule: string-based timers / eval /
new Function, window.execScript, jQuery globalEval/getScript,
document.execCommand, Range.createContextualFragment, crypto.generateCRMFRequest,
and assignments to script.textContent. Each card wires attacker-controlled DOM data (hash/search/inputs/storage)
into the relevant sink without validation.
// inline-script[#2]
function runExecScriptSink() {
var field = document.getElementById('jsi-execscript-input');
var stored = sessionStorage.getItem('jsiExecScriptPayload');
var payload = (field && field.value) || stored || '';
if (!payload) return;
if (window.execScript) {
window.execScript(payload);
} else if (typeof execScript === 'function') {
execScript(payload);
}
}
runExecScriptSink();
JSI-H3 (High): localStorage → $.globalEval / user URL → $.getScript
// inline-script[#3]
function runJqueryExecution() {
var inline = document.getElementById('jsi-jquery-payload').value;
var stored = localStorage.getItem('jsiGlobalEvalPayload') || document.cookie;
var payload = inline || stored;
if (payload) {
$.globalEval(payload);
}
var url = document.getElementById('jsi-jquery-url').value || new URLSearchParams(location.search).get('script');
if (url) {
$.getScript(url);
}
}
runJqueryExecution();
// inline-script[#5]
function renderFragmentFromStorage() {
var field = document.getElementById('jsi-fragment-input');
var stored = sessionStorage.getItem('jsiFragmentPayload');
var payload = (field && field.value) || stored || '';
if (!payload) return;
var target = document.getElementById('jsi-fragment-target');
if (!target) return;
var range = document.createRange();
range.selectNode(target);
var fragment = range.createContextualFragment(payload);
target.innerHTML = '';
target.appendChild(fragment);
}
renderFragmentFromStorage();
// inline-script[#7]
function updateInlineScript() {
var scriptTag = document.getElementById('jsi-inline-script');
var field = document.getElementById('jsi-script-text-input');
var payload = field.value || localStorage.getItem('jsiScriptTextPayload') || window.name;
if (!payload) return;
scriptTag.textContent = payload;
}
updateInlineScript();