2

私は意図的に(テストのために)WebMatrix C#で次の変数を割り当てました:

string val = "<script type='text/javascript'>alert('XSS Vector')</script>";

ページの後半で、かみそりを使用してその値をページに直接書き込みました。

<p>
    @val
</p>

テキストを書き込みますが、安全な方法で(つまり、アラートスクリプトは実行されません)

これは、'val'にhtmlエンティティ(たとえば)が含まれている場合、ページがレンダリングされると予想されるように、「<」ではなく&lt;正確に「」も書き込むという事実と相まって。&lt;

これは、C#が最初に実行され、次にhtmlがレンダリングされるためですか?

さらに重要なことに、このように使用する場合、この方法でかみそりを使用することは、htmlエンコーディングの適切な代替手段ですか?

4

1 に答える 1

1

構文は、@Variable渡したテキストをHtmlEncodeします。したがって、文字列値に設定した内容が文字通り表示されます。これはXSS保護用であるという点で正しいです。これを行うのはRazorの一部です。@Variable構文自体。

したがって、基本的に、@Variable構文の使用は、HTMLエンコーディングの「置き換え」ではありません。HTMLエンコーディングです。

関連:HTMLをレンダリングするための文字列が必要な場合は、Razorで次の構文を使用します。

@Html.Raw(Variable)

これにより、HTMLエンコーディングが実行されなくなります。明らかに、これはユーザーが入力したものでは危険です。

于 2013-02-22T22:25:38.940 に答える