我的反xss功能安全吗?

时间:2013-02-08 20:00:59

标签: javascript security filter xss

我的网站上有一些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;

是否可以绕过此过滤器?

2 个答案:

答案 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