次の方法で共有


CA5374: XslTransform を使用しない

プロパティ
ルール ID CA5374
Title XslTransform を使用しません
[カテゴリ] Security
修正が中断か中断なしであるか なし
.NET 8 では既定で有効 いいえ

原因

潜在的に危険な外部参照を制限したり、スクリプトを禁止したりしない、System.Xml.Xsl.XslTransform をインスタンス化している。

規則の説明

信頼できない入力を処理している場合、XslTransform は脆弱です。 攻撃者は任意のコードを実行できます。

違反の修正方法

XslTransformSystem.Xml.Xsl.XslCompiledTransform で置き換え 詳細については、[/dotnet/standard/data/xml/migrating-from-the-xsltransform-class] を参照してください。

どのようなときに警告を抑制するか

XslTransform オブジェクト、XSLT スタイル シート、および XML ソース データはすべて信頼できる発行元のものです。

警告を抑制する

単一の違反を抑制するだけの場合は、ソース ファイルにプリプロセッサ ディレクティブを追加して無効にしてから、規則をもう一度有効にします。

#pragma warning disable CA5374
// The code that's violating the rule is on this line.
#pragma warning restore CA5374

ファイル、フォルダー、またはプロジェクトの規則を無効にするには、構成ファイルでその重要度を none に設定します。

[*.{cs,vb}]
dotnet_diagnostic.CA5374.severity = none

詳細については、「コード分析の警告を抑制する方法」を参照してください。

疑似コードの例

違反

現在のところ、次の擬似コード サンプルでは、この規則により検出されたパターンを示しています。

using System;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;

namespace TestForXslTransform
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create a new XslTransform object.
            XslTransform xslt = new XslTransform();

            // Load the stylesheet.
            xslt.Load("https://server/favorite.xsl");

            // Create a new XPathDocument and load the XML data to be transformed.
            XPathDocument mydata = new XPathDocument("inputdata.xml");

            // Create an XmlTextWriter which outputs to the console.
            XmlWriter writer = new XmlTextWriter(Console.Out);

            // Transform the data and send the output to the console.
            xslt.Transform(mydata, null, writer, null);
        }
    }
}

解決策

using System.Xml;
using System.Xml.Xsl;

namespace TestForXslTransform
{
    class Program
    {
        static void Main(string[] args)
        {
            // Default XsltSettings constructor disables the XSLT document() function
            // and embedded script blocks.
            XsltSettings settings = new XsltSettings();

            // Execute the transform.
            XslCompiledTransform xslt = new XslCompiledTransform();
            xslt.Load("https://server/favorite.xsl", settings, new XmlUrlResolver());
            xslt.Transform("inputdata.xml", "outputdata.html");
        }
    }
}