用于“onmouseover”关键字xss的ASP Classic过滤器

时间:2012-10-04 19:07:54

标签: javascript asp-classic xss

这是互联网上的一个重要问题,但是,没有简单的答案。我知道我不会仅仅通过过滤来摆脱所有XSS,但我想从它开始。我目前正在使用用JScript编写的服务器代码(不是通常的VBScript)开发ASP Classic项目。我们发现我们很容易受到一些XSS攻击。一个是很难摆脱,因为我不是一个JavaScript的主人。当您使用如下所示的URL时,攻击是成功的。

  

http://mysite/default.asp?NumVol=%20onmouseover=%22alert%28document.cookie%29%22%20style=%22font-size:999999999999px;%22%20href=

我尝试了HTMLEncode,NumVol参数字符串上的替换方法......但它仍然显示了cookie。我正在寻找的是一个小的替换方法,一个正则表达式或任何简单的事情来管理这个特定的情况。

这是一款旧的制作应用,他们不想花太多时间。只是一些安全基础知识。我们绝对不会安装依赖于.NET的库(如OWASP)来解决这个问题,因为我们很快就会在.NET中重建应用程序。

修改

以下是我尝试过的示例代码。您可以看到我使用HTMLEncole加上一些带有“替换”的过滤器。 “%”字符存在,但它不起作用,因为写入了onmouseover。我需要的是Javacript中的语法例子(regex或someting),我可以在这种情况下应用。

var sPage = "" + Request.ServerVariables ( "SCRIPT_NAME" );
var NumVol = Request.QueryString("NumVol");
var comp = Request.QueryString("comp")
var nav = Request.QueryString("nav");
var NoEle = Request.QueryString("NoEle");
var NoCons = Request.QueryString("NoCons");

if (Lg=="en")  {
    var pageSourceValid = Server.HTMLEncode(sPage + "?Lg=fr");
    Response.Write("<a href=");
        if ((NumVol+"" != "undefined") && (NumVol+"" != "")) {
            pageSourceValid += "&NumVol=" + NumVol.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"");
        }
        if ((nav+"" != "undefined") && (nav+"" != "")) {
            pageSourceValid += "&nav=" + nav.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"") + "";
        }
        if ((comp+"" != "undefined") && (comp+"" != "")) {
            pageSourceValid += "&comp=" + comp.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"") + "";
        }
        if ((NoEle+"" != "undefined") && (NoEle+"" != "")) {
            pageSourceValid += "&NoEle=" + NoEle.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"") + "";
        }
        if ((NoCons+"" != "undefined") && (NoCons+"" != "")) {
            pageSourceValid += "&NoCons=" + NoCons.replace(/\<|\>|\"|\'|\%|\;|\(|\)|\&|\+|\-/g,"") + "";
        }

Response.Write(Server.HTMLEncode(pageSourceValid));
Response.Write (" class=lienBanniere>");
Response.Write ("Français");
Response.Write ("</a>");

}

1 个答案:

答案 0 :(得分:0)