ブログの投稿を読んでいて、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