【问题标题】:ASP Classic filter for "onmouseover" keyword xss“onmouseover”关键字 xss 的 ASP 经典过滤器
【发布时间】:2012-10-04 19:07:53
【问题描述】:

这是互联网上的一个冗余问题,但没有简单的答案。我知道我不会简单地通过过滤来摆脱所有 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 参数字符串上的 replace 方法...但它仍然显示 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>");

}

【问题讨论】:

  • 你没有显示你如何在页面上显示它。显示导致问题的 ASP JScript 的 sn-p 会有所帮助。就像您尝试 HTMLEncode 的部分和周围的行一样。
  • 我认为你应该使用 Http referer。如果是 Jscript,那么我不知道语法,但如果它是服务器端脚本语言,那么应该有一个 http 引用检查函数或类似的东西

标签: javascript asp-classic xss


【解决方案1】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-14
    • 2011-06-13
    • 1970-01-01
    • 2015-08-15
    • 1970-01-01
    相关资源
    最近更新 更多