1

ブログの投稿を読んでいて、JSEncodingVulnerabilityというものを見ました。以下のサンプルコードでは、ユーザーが次のように入力した場合:

\x3cscript\x3e%20alert(\x27pwnd\x27)%20\x3c/script\x3e、JSはそれをHTMLとしてレンダリングすると言っていますが、これは私には奇妙に見えます。私はそれを試しました、そして彼は正しかったです。

@{
    ViewBag.Title = "Home Page";
}

<h2 id="welcome-message">Welcome to our website</h2>

@if(!string.IsNullOrWhiteSpace(ViewBag.UserName)) {
<script type="text/javascript">
    $(function () {
        //ViewBag.Username value comes from Controller.
        var message = 'Welcome, @ViewBag.UserName!';
        $("#welcome-message").html(message).hide().show('slow');
    });
</script>
}

私の質問は、なぜJavascriptはすでにエンコードされた文字列を自動的にデコードするのですか?それとも、それを行うjQueryのhtml()関数で何かがありますか?OPはAjax.EncodeJavascriptString()、この問題を解決するためにメソッドを使用すると言います。しかし、なぜすでにエンコードされた文字列をエンコードする必要があるのでしょうか?jQueryのウェブサイトをチェックしましたが、メソッドについてはそのようなことは何も言及されていませんhtml()

ブログ投稿全体を表示したい場合は、このアドレスにアクセスしてくださいhttp://weblogs.asp.net/jgalloway/archive/2011/04/28/preventing-javascript-encoding-xss-attacks-in-asp-net- mvc.aspx

4

1 に答える 1

3

HTML の結果を見てください。

<script type="text/javascript">
    $(function () {
        var message = 'Welcome, \x3cscript\x3e alert(\x27pwnd\x27) \x3c/script\x3e!';
        $("#welcome-message").html(message).hide().show('slow');
    });
</script>

それでも、そのJS文字列にはいくつかの文字エスケープシーケンスが含まれており、

'Welcome, <script> alert("pwnd") </script>!'

したがって、これらのエスケープ シーケンス ( \norなどの単純なものを含む\t) と JS 文字列区切り記号'and "- を を使用してエスケープしたいと考えてい@Encoder.JavaScriptEncodeます。

于 2013-02-19T18:13:30.590 に答える