Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我的反xss功能安全吗?_Javascript_Security_Filter_Xss - Fatal编程技术网

Javascript 我的反xss功能安全吗?

Javascript 我的反xss功能安全吗?,javascript,security,filter,xss,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(w

我的网站上有一些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;
//与PHP的$\u GET类似
函数get(名称){
名称=名称。替换(/[\[]/,“\\\[”)。替换(/[\]]/,“\\\]”);
regexS=“[\\?&]”“+name+”=([^&\\]*)”;
regex=新的RegExp(regexS);
结果=regex.exec(window.location.href);
如果(结果==null)
返回“”;
返回结果[1];
}
//这是我的反xss过滤器
var param=unescape(decodeURI(get(“q”));
param=param.replace(//gi,“”);
someElement.innerHTML=param;

是否可以绕过此过滤器?

否,但如果在最后一行模拟多行模式,如下所示:

param = param.replace(/<([\s\S]*?)>/gi, "");

如果使用jQuery,则可以使用函数,该函数本身使用
createTextNode

请勿在进入应用程序的过程中尝试查找XSSE。您的程序可以在内部转换数据,这样您创建的任何过滤器都可能是可绕过的


相反,在退出应用程序时应用适当的HTML数据编码。这样可以避免这些漏洞。

这可能在某种程度上适用于JS,但仅在某种程度上,总的来说,客户端的任何东西都远不是万无一失或安全的。有了这一点,我就不会100%依赖于任何客户端预防。如果将变量注入元素的innerHTML中,那么您需要更加小心,因为有人可以轻松地将代码注入您的页面,然后使用该代码将更多有趣的内容注入您的服务器。我想说:不,这不安全,只会像“magic_quotes”那样添加错误的安全感。“筛选”方法的根本问题在于它不是正确的解决方案-正确的解决方案是在使用站点安全地应用数据。也就是说,如果innerHTML不应该包含HTML,HTML会在使用站点对其进行编码——但是为什么要从innerHTML开始呢?这里有一个反例:
?q=alert('XSS')
var param = unescape(decodeURI(get("q")));
var text  = document.createTextNode(param);
document.getElementById(someElement).appendChild(newtext);