这个JavaScript代码是否存在安全风险

时间:2015-10-07 19:34:27

标签: javascript

我想在静态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;
&#13;
&#13;

3 个答案:

答案 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=&lt;script&gt;// anything;" />

我可以在您的页面上运行任意Javascript,访问用户访问您网站上我的网站的cookie。这意味着我可以让他们在你不知道的情况下在你的网站上做些什么,或者将他们的cookie发送到我的服务器,这样我就可以劫持他们的会话。

相关问题