我想在静态html页面上制作flash消息。我打算使用以下代码,我想知道它是否存在安全风险?
$( document ).ready(function() {
var results = parseURL(window.location.href);
if (results['info']) {
$("#flash").html(urldecode(results['info']));
$("#flash").addClass("alert-info");
$("#flash").removeClass("hidden");
}
});
function urldecode(str) {
return decodeURIComponent((str+'').replace(/\+/g, '%20'));
}
function parseURL(url) {
var parser = document.createElement('a'),
searchObject = {},
queries, split, i;
// Let the browser do the work
parser.href = url;
// Convert query string to object
queries = parser.search.replace(/^\?/, '').split('&');
for( i = 0; i < queries.length; i++ ) {
split = queries[i].split('=');
searchObject[split[0]] = split[1];
}
return searchObject;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="flash" class="alert hidden" role="alert"></div>
&#13;
答案 0 :(得分:2)
是的,假设该域名中存在值得攻击的内容,则可能存在安全风险。在info
参数中为XSS攻击注入JavaScript应该没有问题。
作为一般规则,最好不要从页面上的查询字符串输出HTML。
为此,您可以替换.html
方法:
$("#flash").html(urldecode(results['info']));
使用.text
方法:
$("#flash").text(urldecode(results['info']));
答案 1 :(得分:1)
您从网址获取数据并将其作为HTML放在页面中。
第一个风险是跨站点脚本,如果恶意站点向您域中的数据(例如cookie)的合法用户提供精心设计的链接,则攻击者的代码可以读取它并将其发送到自己的服务器
如果用户可以访问您域中的API,注入的代码可以以其名义发送请求,那么这可能会更加复杂。
所以,是的,尽量不要将URL提取的数据作为HTML插入。将其显示为字符串,您将是安全的(社交工程除外)。
答案 2 :(得分:1)
是的,这是一个问题。您正在解析?info=
或&info=
的查询字符串,然后取出所有内容并将其作为HTML直接插入到页面中。
如果我创建的网站会将您置于隐藏的iframe中,例如<iframe src="//yoursite.com/?info=<script>// anything;" />
我可以在您的页面上运行任意Javascript,访问用户访问您网站上我的网站的cookie。这意味着我可以让他们在你不知道的情况下在你的网站上做些什么,或者将他们的cookie发送到我的服务器,这样我就可以劫持他们的会话。