0

これはインターネット上での冗長な質問ですが、それでも簡単な答えはありません。フィルタリングだけではすべてのXSSを取り除くことはできないと思いますが、まずはそれから始めたいと思います。私は現在、JScript(通常のVBScriptではない)で記述されたサーバーコードを使用してASPClassicプロジェクトに取り組んでいます。XSS攻撃に対して脆弱であることがわかりました。私はJavaScriptのマスターではないので、1つを取り除くのはかなり難しいです。以下のようなURLを使用すると、攻撃は成功します。

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

NumVolパラメータ文字列のreplaceメソッドであるHTMLEncodeを試しましたが、それでもCookieが表示されます。私が探しているのは、小さな置換方法、正規表現、またはその特定のケースを管理するための簡単なものだけです。

これは古いプロダクションアプリであり、彼らはそれに多くの時間を費やしたくありません。いくつかのセキュリティの基本。.NETでアプリをすぐに再構築するため、現時点では、これを修正するために.NET(OWASPなど)に依存するライブラリをインストールしていません。

編集

これが私が試したサンプルコードです。HTMLEncoleに加えて、「置換」を備えたいくつかのフィルターを使用していることがわかります。「%」文字はありますが、マウスオーバーが書き込まれているため、機能しません。必要なのは、その場合に適用できるJavacriptの構文例(正規表現または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>");

}

4

1 に答える 1

0

値を出力するときは、html 属性エスケープと html エスケープを使用します。

https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet

于 2012-10-05T05:52:18.770 に答える