在this page上,它表明下面的代码是可注射的。但是我不知道怎么做。在线答案说将\74a onclick=alert(1)\76W
放入标有“输入”的textarea(名称下方),然后单击W即可。
页面确实说我赢了但是我认为这是错误的
我ran it on jsfiddle,发现它被正确转义并且未被注射。页面在说什么?是真的有注射还是挑战页错了?
HTML:
<div id="c">text</div>
JS:
//from challenge page
function escape(s) {
function htmlEscape(s) {
return s.replace(/./g, function(x) {
return { '<': '<', '>': '>', '&': '&', '"': '"', "'": ''' }[x] || x;
});
}
function expandTemplate(template, args) {
return template.replace(
/{(\w+)}/g,
function(_, n) {
return htmlEscape(args[n]);
});
}
return expandTemplate(
" \n\
<h2>Hello, <span id=name></span>!</h2> \n\
<script> \n\
var v = document.getElementById('name'); \n\
v.innerHTML = '<a href=#>{name}</a>'; \n\
<\/script> \n\
",
{ name : s }
);
}
//the solution
$('#c').html(escape('\74a onclick=alert(1)\76W'));
答案 0 :(得分:1)
您需要转义反斜杠,以便\74
和\76
不会更改转义函数。否则,它们会过早转换为<
和>
。
$('#c').html(escape('\\74a onclick=alert(1)\\76W'));