我的网站上有一些javascript函数,但我不知道使用它们是否安全。
这是我的代码:
// works like PHP's $_GET
function get(name){
name=name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
regexS="[\\?&]"+name+"=([^&#]*)";
regex=new RegExp(regexS);
results=regex.exec(window.location.href);
if(results==null)
return '';
return results[1];
}
// and here is my anti xss filter
var param = unescape(decodeURI(get("q")));
param = param.replace(/<(.*?)>/gi, "");
someElement.innerHTML = param;
是否可以绕过此过滤器?
答案 0 :(得分:3)
请勿尝试在进入应用程序的途中找到XSS。您的程序可以在内部转换数据,使您创建的任何过滤器都可以绕过。
相反,在应用程序 out 的方式上应用适当的HTML数据编码。这样就可以避免漏洞。
答案 1 :(得分:0)
不,但如果您在第二行最后一行模拟多线模式,请执行以下操作:
param = param.replace(/<([\s\S]*?)>/gi, "");
您的示例代码将是安全的。当您根本不想添加HTML时,示例代码中最大的缺陷就是使用innerHTML
。因此,您应该使用createTextNode
而不是使用innerHTML
并尝试过滤HTML,而不必担心XSS。如果您愿意,请保留get
函数,并使用像这样的参数值(改编自MDN):
var param = unescape(decodeURI(get("q")));
var text = document.createTextNode(param);
document.getElementById(someElement).appendChild(newtext);
如果您使用jQuery,则可以使用.text()
函数,该函数本身使用createTextNode
。