[C#] XSS対策としてHtmlSanitizerを利用する


はじめに

クロスサイト・スクリプティング(以下、XSSという)とは、悪意あるスクリプトを実行されてしまう脆弱性のことを指します。

この悪意あるスクリプトは、Webページの表示に利用者のブラウザ上で実行されます。
例えば、本物のサイト上に偽ページが表示されたり、Cookieが漏洩することでセッションID漏洩によるなりすましが行われたりします。

このようなXSSに対する対策に、「HtmlSanitizer」というライブラリを利用して対策しようとおもいます。
主な利用例については以降で備忘録として残しておきます。

HtmlSanitizerをnugetでインストールする

1) [プロジェクト]-[Manage Nuget Package]を選択します。選択するとNuget管理画面が表示されます。
2) HtmlSanitizerを検索し、パッケージを追加します。

利用例

では実際に利用してみようと思います。

using System;
using Ganss.XSS;
using NUnit.Framework;

namespace ConsoleAppTest
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Arrange
                var sanitizer = new HtmlSanitizer();

                // Act
                string htmlFragment = "<IMG SRC=javascript:alert('XSS')>";
                string actual = sanitizer.Sanitize(htmlFragment);

                // Assert
                string expected = "<IMG>";
                Assert.That(actual, Is.EqualTo(expected).IgnoreCase);
            }
            catch(Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
    }
}

危ないタグやスクリプトがしっかりと削除されます。

最後に

以下に様々な例が紹介されていますので、参考にしてみてください。

https://csharp.hotexamples.com/examples/Html/HtmlSanitizer/Sanitize/php-htmlsanitizer-sanitize-method-examples.html