JavaScript インジェクション攻撃とは何ですか?
Web サイトは、ユーザー入力を受け入れてそのコンテンツを再表示するたびに、JavaScript インジェクション攻撃に対して脆弱になります。 JavaScript インジェクション攻撃に対して脆弱な特定のアプリケーションを調べてみましょう。顧客フィードバック Web サイトを作成したとします。顧客は Web サイトにアクセスして、製品に関するフィードバックを入力できます。顧客がフィードバックを送信すると、フィードバック情報がフィードバック ページに再度表示されます。
顧客フィードバック Web サイトはシンプルな Web サイトです。残念ながら、このサイトは JavaScript インジェクション攻撃に対して脆弱です。
次のテキストが顧客フィードバック フォームに入力されているとします。
このテキストは、警告メッセージ ボックスを表示する JavaScript スクリプトを表します。誰かがこのスクリプトを顧客フィードバック フォームに送信すると、今後顧客フィードバック サイトにアクセスする人にはメッセージ
が表示されます。また、他の人が JavaScript インジェクション攻撃によって大混乱を引き起こすことはないと考えるかもしれません。
さて、JavaScript インジェクション攻撃に対する最初の反応は、それを無視することかもしれません。 JavaScript インジェクション攻撃は単なる無害なものだと思うかもしれません
残念ながら、ハッカーは Web サイトに JavaScript をインジェクションして大混乱を引き起こすことが知られています。クロスサイト スクリプティング (XSS) 攻撃は、JavaScript インジェクション攻撃を使用して実行される可能性があります。クロスサイト スクリプティング攻撃では、ユーザーの機密情報が盗まれ、別の Web サイトに送信される可能性があります。
たとえば、ハッカーは JavaScript インジェクション攻撃を使用して、他のユーザーのブラウザから Cookie 値を盗むことができます。機密情報 (パスワード、クレジット カードのアカウント番号、社会保障番号など) がブラウザーの Cookie に保存されている場合、ハッカーは JavaScript インジェクション攻撃を使用してこの情報を盗む可能性があります。あるいは、ユーザーがページ上のフォーム フィールドに機密情報を入力し、そのページが JavaScript 攻撃によって侵害された場合、ハッカーは挿入された JavaScript を使用してフォーム データを取得し、それを別の Web サイトに送信する可能性があります。
十分にご注意ください。 JavaScript インジェクション攻撃を真剣に受け止め、ユーザーの機密情報を保護します。次の 2 つのパートでは、ASP.NET MVC アプリケーションを JavaScript インジェクション攻撃から保護するための 2 つの手法について説明します。
方法 2: データベースに書き込む前の HTML エンコード
ビューにデータを表示するときに HTML を使用してデータをエンコードするだけでなく、データベースに送信する前に HTML を使用してデータをエンコードすることもできます。
2 番目の方法は、リスト 4 のコントローラーの場合とまったく同じです。
例:
public ActionResult Create(string message)
{
// フィードバックを追加
var newFeedback = new Feedback();
newFeedback.Message = Server.HtmlEncode(message);
newFeedback.EntryDate = DateTime.Now ;
db.Feedbacks.InsertOnSubmit(newFeedback);
db.SubmitChanges();
// Redirect
return RedirectToAction(“Index”);
}
Message の値は送信される前に Create( にあることに注意してくださいデータベースへの) 操作は HTML エンコードされます。メッセージがビューに再表示されるとき、メッセージは HTML エンコードされるため、メッセージに挿入された JavaScript は実行されません。
一般に、人々は 2 番目の方法ではなく、このチュートリアルで説明する最初の方法を使用することを好みます。 2 番目の方法の問題は、データベース内に HTML エンコードされたデータが残ることです。つまり、データベース内のデータには奇妙な文字が含まれることになります。何が害ですか?データベース データを Web ページ以外の形式で表示する必要がある場合、問題が発生します。たとえば、Windows フォーム アプリケーションではデータを簡単に表示できません。