1. ホーム
  2. cp

Javascriptインジェクション攻撃

2022-02-23 21:11:06

Javascriptインジェクション攻撃?

javascriptインジェクション攻撃とは何ですか?実は、他の攻撃と比べると、javascriptは比較的単純なものかもしれません。

ウェブサイトがユーザーの入力を受け付け、その内容を再表示するたびに、この攻撃を受ける可能性があります。

asp.net mvcを使用した簡単な例です。

[ValidateInput(false)
    public class HomeController : Controller
    {
        public string Index(string genre)
        {
            //return the genre parameter unchanged
            string result = genre;
            return result;
        }

        public ActionResult About()
        {
            return View();
        }
    }

これはコントローラのコードで、URL リクエストが対応するアクションへのルートによって解析されるところです。

このインデックスメソッドでは、呼び出しビューレベルのコードは存在せず、ジャンルパラメータはページ上に直接文字列として表示されます。

http://localhost:1796/home/index?genre=abc のような通常のURLの場合、ページにはabcが表示されます。

しかし、javascriptによる攻撃では、例えばurlがhttp://localhost:1796/home/index?genre= の場合 <script>window.location='http://baidu.com/'</script>

ここでは、他に2つのケースがあります。

1、Chromeの場合。

表面上の現象は、何も返ってこないのに、デバッガを開くとページエラーが表示される

JavaScript スクリプトの実行を拒否されました。スクリプトのソースコードがリクエスト内に見つかりました。

<スパン 2.IEでどうなるかを見るため。

<スパン 本当に上手なんだなぁと思います。


他のブラウザでは実験していません。

<スパン 個人的には、クロームブラウザの動作は、このようなものだと判断しています。

<スパン 1. サーバーサイドから返される結果は <script>window.location='http://baidu.com/'</script>

<スパン 2. ブラウザが、 "I cao, this is a piece of js code, do I execute it or not?

<スパン 3. 焦らず、まずはリクエストの内容を見る http://localhost:1796/home/index?genre= <スパン <script>window.location='http://baidu.com/'</script>

4.クロームブラウザ: "ニマ、これは典型的なjavascript攻撃です、なぜならマッチング要求と返されたjsコードは同じです"。

<スパン 5. くっそー、出演拒否だー。

この方法でクロームの実装を少しオナニーして、クロームはまだ賢いと思う。


<スパン 追記:実はasp.net mvcフレームワークの方がまだ優れているんです。

<スパン 注意深く見ていると、コントローラのコードの中に [ValidateInput(false)] という余分な行があることに気づくかもしれません。

目的は、mvc のチェックサムのクエリ文字列の部分をブロックすることです。urlの中に <script> のようなものが含まれている場合、httpリクエストはurlRouteレイヤーに到達しません。

その代わり System.Web.HttpRequestが最初にインターセプトして、例外をスローします。

クライアントから危険な可能性のあるRequest.QueryStringの値が検出されました(genre="<script>

を追加し、さらに [ValidateInput(false)]は、httpのチェックサムをオフにするためのものです。