Javascript 未关闭的img标签中断站点,但未显示
我想创建一个简单的站点,它可以被跨站点脚本漏洞破坏。问题在于第三个“困难”挑战,即使用正则表达式过滤输入,并删除以尖括号开始和结束的所有内容。例如,Javascript 未关闭的img标签中断站点,但未显示,javascript,html,xss,Javascript,Html,Xss,我想创建一个简单的站点,它可以被跨站点脚本漏洞破坏。问题在于第三个“困难”挑战,即使用正则表达式过滤输入,并删除以尖括号开始和结束的所有内容。例如, 搜寻 这是对应的JavaScript: <head> <title>Search</title> <meta charset="UTF-8"> <link rel="stylesheet" href="stylesheet/stylesheet.css">
搜寻
这是对应的JavaScript:
<head>
<title>Search</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="stylesheet/stylesheet.css">
<script src="script/xss_hard.js"></script>
</head>
<body>
<div id="top">
<div id="Logo">
<img src="images/logo.png" style="margin-top: 0px; width:150px;display:block" />
<h2><span id="title">Search</span></h2>
</div>
</div>
<div id="logic">
<input type="text" onclick="javascript:clearBox()" value="Search" id="box">
<input type="submit" value="Check" onclick="javascript:submit()" id="butt">
</div>
<p id="searchReflect"></p>
</body>
函数提交(){
var reflect=document.getElementById('searchReflect');
var-boxText=document.getElementById('box')。值;
var黑名单=/;
替换(黑名单“”);
reflect.HTML=“您对\”“+boxText+“\”的搜索没有返回任何内容!”;
}
我们的期望是,可以注入例如并获得警报弹出窗口(XSS)。实际情况是这样的(摘自Firefox inspector的“编辑为HTML”):
您对“
奇怪的是,它破坏了输出,但仍然没有运行。与svg
、iframe
或其他标记相同。当过滤或正确嵌入时(例如innerText
),它应该是:
您对“foo”的搜索没有返回任何结果!
您需要改进代码
function submit(){
var reflect = document.getElementById('searchReflect');
var boxText = document.getElementById('box').value;
var blacklist = /<.*>/;
boxText = boxText.replace(blacklist, '');
reflect.HTML = "Your search for \"" + boxText + "\" returned nothing!";
}
搜寻
搜寻
和相应的Javascript。我在
标记中添加了jQuery以使代码更简单:)Javascript太长,无法编写,因此请使用jQuery而不是Javascript
<head>
<title>Search</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="stylesheet/stylesheet.css">
<script src="https://code.jquery.com/jquery-3.4.1.js"integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU="crossorigin="anonymous"></script>
<script src="script/xss_hard.js"></script>
</head>
<body>
<div id="top">
<div id="Logo">
<img src="images/logo.png" style="margin-top: 0px;width:150px;display:block" />
<h2><span id="title">Search</span></h2>
</div>
</div>
<div id="logic">
<input type="text" value="" id="box" placeholder="Search" />
<input type="submit" value="Check" onclick="submit()" id="butt" />
</div>
<p id="searchReflect"></p>
</body>
函数提交(){
var reflect=$(“#searchReflect”);
var-boxText=document.getElementById('box')。值;
var黑名单=/;
替换(黑名单“”);
html('您对\''+boxText+'\'的搜索没有返回任何内容!');
$('框').val('');
}
我强烈建议您在不使用innerHTML
的情况下使用DOM,如果您愿意,我可以向您展示示例找到我的答案并运行代码。我不知道您的意思。@VadimHulevich。我很高兴看到一个示例-该示例是否仍能运行代码?正如我所说的,我需要跨站点脚本才能工作。谢谢您的回复r、 但这不是问题所在。问题是它为什么会这样,以及我如何解决它。jQuery没有解决问题。发布的答案是由我运行的,它是有效的。没有显示任何图像标记的错误。不幸的是,它对我不起作用。与以前一样,正在发生同样的事情。我需要页面来运行注入的脚本。
function submit(){
var reflect = $('#searchReflect');
var boxText = document.getElementById('box').value;
var blacklist = /<.*>/;
boxText = boxText.replace(blacklist, '');
reflect.html('Your search for \'' + boxText + '\' returned nothing!');
$('#box').val('');
}