目次
C14Nはどのような問題を解決しますか?
XML Canonicalizationのタイプ
1。標準XML(C14N 1.0)
2。排他的な標準XML(Exc-C14n)
3。正規XML 1.1
C14Nの仕組み:重要なルール
例:C14Nの前後
一般的な落とし穴とヒント
どのc14nメソッドを使用するのはいつですか?

XML Canonicalization(C14N)のガイド

Aug 27, 2025 am 06:08 AM
xml 標準化する

<p>XML CanOnicalization(C14N)は、論理的に同等のドキュメントが同一のバイトシーケンスを生成することを保証することにより、XMLの構文変動の問題を解決します。これは、デジタル署名と安全な比較に重要です。 1。CanonicalXML(C1.0)は、完全な制御されたドキュメントに最適な、属性ソーティング、空白の除去、およびUTF-8エンコードを備えた完全な正規化を提供します。 2。排他的な標準XML(Exc-C14N)は未使用の名前空間宣言を除外し、署名ラッピング攻撃に耐性があり、SAMLアサーションなどのドキュメントフラグメントに署名するのに最適です。 3.標準XML 1.1は、XML 1.1機能とレガシーエンコーディングの処理を改善しますが、サポートは限られています。主要なルールには、名前空間と名前で属性の並べ替え、空白の正規化、空の要素の変換、特殊文字のエンコードが含まれます。一般的な落とし穴には、二重標準化と誤ったエンコーディングが含まれるため、Apache Santuario、.NETのXMLDSIGC14NTRANSFORM、またはPythonのLXMLなどの信頼できるライブラリを使用することをお勧めします。 XMLシグネチャを含むほとんどのセキュリティに敏感な分散アプリケーションの場合、排他的な正規化は、フラグメントを再配置または埋め込んだ場合の好ましい方法です。 </p> <p><img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/175624610270372.jpg" class="lazy" alt="XML Canonicalization(C14N)のガイド"></p> <p> XML Canonicalization(C14N)は、XMLコンテンツを標準化された、または「標準的な」形式に変換する方法であり、2つの論理的に同等のXMLドキュメントがまったく同じバイトシーケンスを生成するようにします。これは、デジタル署名で特に重要です。デジタル署名では、白人、属性の順序付け、エンコードなどのわずかな違いでさえ、有効なXMLドキュメントに署名検証に失敗する可能性があります。 </p> <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/175624610337762.jpg" class="lazy" alt="XML Canonicalization(C14N)のガイド"><p> XML C14Nを理解して使用するための実用的なガイドを次に示します。</p> <hr> <h3 id="C-Nはどのような問題を解決しますか"> C14Nはどのような問題を解決しますか?</h3> <p> XMLは、同じ論理データの複数の構文表現を許可します。例えば: </p> <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/175624610270372.jpg" class="lazy" alt="XML Canonicalization(C14N)のガイド"><pre class='brush:php;toolbar:false;'> <book id = "123" title = "xml guide"/></pre><p>論理的に同じです:</p><pre class='brush:php;toolbar:false;'> <book title = "xml guide" id = "123" /></pre><p>しかし、生のバイトとして、それらは異なります。 XMLに署名または比較するとき、これらの違いが重要です。標準化は、一貫したフォーマットルールを実施することにより、そのようなバリエーションを排除します。</p><p>ユースケースは次のとおりです。</p><ul><li>デジタル署名(例:SAML、SOAP、またはXML暗号化)</li><li>信頼できるXML比較</li><li>構造的等価性を検証する必要がある安全なデータ交換</li></ul><hr /><h3 id="XML-Canonicalizationのタイプ">XML Canonicalizationのタイプ</h3><p>W3Cで定義されたいくつかの標準化されたフォームがあります。</p><h4 id="strong-標準XML-C-N-strong"> 1。<strong>標準XML(C14N 1.0)</strong></h4><ul><li> XMLコンテンツの完全な正規化</li><li>要素コンテンツで無関係な空白を削除します</li><li>Alphabetivitivity namespace uriおよびLocal Nameで属性をソートします</li><li>コメントを保存します(<em>排他的な</em>バリアントを使用しない限り)</li><li>外部エンティティ参照のない、整形式のドキュメントが必要です</li></ul><p><strong>最適</strong>:XML構造全体を制御し、完全な正規化が必要なドキュメント。</p><h4 id="strong-排他的な標準XML-Exc-C-n-strong"> 2。<strong>排他的な標準XML(Exc-C14n)</strong></h4><ul><li>マルチパーティ環境でXML署名用に設計されています</li><li>祖先のコンテキストを除外して、「署名ラッピング」攻撃を防ぎます</li><li>要素とその子孫が実際に使用する名前空間宣言のみを含む</li><li>属性はまだソートされています</li></ul><p><strong>使用</strong>:他の場所に移動または埋め込まれる可能性のあるドキュメントの一部に署名する(例、SAMLアサーション)</p><h4 id="strong-正規XML-strong"> 3。<strong>正規XML 1.1</strong></h4><ul><li> 1.0の制限に対処します</li><li>XML 1.1機能とレガシーキャラクターのエンコーディングのより良い取り扱い</li><li>ラインブレークとネームスペースの接頭辞をより一貫して正規化します</li></ul><p><strong>注</strong>:C1.0またはExc-C14Nよりも広くサポートされていません。</p><hr /><h3 id="C-Nの仕組み-重要なルール"> C14Nの仕組み:重要なルール</h3><p>標準化中、次の変換が適用されます。</p><ul><li><strong>属性の順序付け</strong>:属性は、名前空間URI(最初に空のURI)でソートされ、次にローカル名によってソートされます。</li><li><strong>引用</strong>:すべての属性値は、二重引用符で引用されます。</li><li><strong>空の要素</strong>:元々自己閉鎖しない限り、スタートエンドタグペア(例: <code><tag></tag></code> >)に変換されます。</li><li> <strong>Whitespace</strong> :重要でない白人(例:要素間)が削除されます。テキスト内の空白は保存されています。</li><li><strong>文字エンコーディング</strong>:出力はUTF-8で、特殊文字は文字参照として表されます(例: <code><</code> 、 <code>€</code> )。</li><li><strong>名前空間宣言</strong>:冗長または未使用の名前空間宣言は削除されます(特にExc-C14Nで)。</li></ul><hr /><h3 id="例-C-Nの前後">例:C14Nの前後</h3><p><strong>オリジナルXML:</strong></p><pre class='brush:php;toolbar:false;'> <signed xmlns = "urn:example" xmlns:ex = "http://example.org"> <Da​​ta Ex:id = "abc" xmlns:temp = "junk"> こんにちは&さようなら </data> </署名></pre><p><strong>排他的な標準化の後:</strong></p><pre class='brush:php;toolbar:false;'> <signed xmlns = "urn:example" xmlns:ex = "http://example.org"> <データ例:id = "abc"> hello&goodbye </data> </signed></pre><p>知らせ:</p> <ul> <li>追加の名前空間<code>temp</code>がドロップされます</li> <li>ホワイトスペースが正規化されました</li> <li> <code>&</code> <code>&</code> (デコードされた後、必要な場合にのみ再エンコードされます)</li> <li>余分なラインブレークやインデントはありません</li> </ul> <hr> <h3 id="一般的な落とし穴とヒント">一般的な落とし穴とヒント</h3> <ul> <li> <strong>2回正規化しないでください</strong>。C14Nを複数回適用すると、結果が誤っているか、二重エンコードにつながる可能性があります。</li> <li> <strong>エンコーディングを監視</strong>:標準化後にXMLパーサー出力がUTF-8を確実に出力します。</li> <li> <strong>信頼できるライブラリを使用</strong>:ハンドローリングC14Nはエラーが発生しやすいです。次のような確立されたツールを使用してください:<ul> <li> Apache Santuario(Java/C)</li> <li> .NETの<code>XmlDsigC14NTransform</code> </li> <li> <code>c14n</code>メソッドを備えたPythonの<code>lxml.etree</code> </li> </ul> </li> <li> <strong>実際のデータを使用したテスト</strong>:特に、名前空間、CDATA、または特殊文字が混在するドキュメント。</li> </ul> <hr> <h3 id="どのc-nメソッドを使用するのはいつですか">どのc14nメソッドを使用するのはいつですか?</h3> <table> <thead><tr> <th>シナリオ</th> <th>推奨されるC14N</th> </tr></thead> <tbody> <tr> <td>完全で自己完結型のドキュメントに署名します</td> <td>標準XML 1.0</td> </tr> <tr> <td>移転する可能性のあるフラグメントに署名する(例:SAML)</td> <td>排他的なC14N</td> </tr> <tr> <td> XML 1.1またはレガシーエンコーディングを使用します</td> <td>標準XML 1.1</td> </tr> <tr> <td>最小限の処理が必要です</td> <td>exc-c14n(分散システムにより柔軟性があります)</td> </tr> </tbody> </table> <hr> <p>基本的に、XML Canonicalizationは、論理的に同一のXMLのバイトに相当する等価性を保証します。適切な方法を選択することは、あなたのコンテキスト、特にドキュメントの断片、名前空間、またはセキュリティ批判的な署名を扱うかどうかに依存します。</p> <p>ほとんどの最新のセキュリティアプリケーション(SAMLやWS-Securityなど)では、<strong>排他的な標準化</strong>が選択肢です。ツールがそれを正しくサポートしていることを確認してください。</p>

以上がXML Canonicalization(C14N)のガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PowerPoint を使用して XML ファイルを開くことはできますか? PowerPoint を使用して XML ファイルを開くことはできますか? Feb 19, 2024 pm 09:06 PM

XML ファイルは PPT で開くことができますか? XML、Extensible Markup Language (Extensible Markup Language) は、データ交換とデータ ストレージで広く使用されている汎用マークアップ言語です。 HTML と比較して、XML はより柔軟であり、独自のタグとデータ構造を定義できるため、データの保存と交換がより便利で統一されます。 PPT (PowerPoint) は、プレゼンテーションを作成するために Microsoft によって開発されたソフトウェアです。包括的な方法を提供します。

PHPでHTML/XMLを解析および処理するにはどうすればよいですか? PHPでHTML/XMLを解析および処理するにはどうすればよいですか? Feb 07, 2025 am 11:57 AM

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

C# 開発で XML および JSON データ形式を処理する方法 C# 開発で XML および JSON データ形式を処理する方法 Oct 09, 2023 pm 06:15 PM

C# 開発で XML および JSON データ形式を処理する方法には、特定のコード サンプルが必要です。現代のソフトウェア開発では、XML と JSON の 2 つのデータ形式が広く使用されています。 XML (Extensible Markup Language) はデータの保存と送信に使用されるマークアップ言語であり、JSON (JavaScript Object Notation) は軽量のデータ交換形式です。 C# 開発では、XML と JSON データの処理と操作が必要になることがよくありますが、この記事では、C# を使用してこれら 2 つのデータ形式を処理し、添付する方法に焦点を当てます。

PHP 関数を使用して XML データを処理するにはどうすればよいですか? PHP 関数を使用して XML データを処理するにはどうすればよいですか? May 05, 2024 am 09:15 AM

PHPXML 関数を使用して XML データを処理します。 XML データを解析します。 simplexml_load_file() および simplexml_load_string() は、XML ファイルまたは文字列を読み込みます。 XML データにアクセスする: SimpleXML オブジェクトのプロパティとメソッドを使用して、要素名、属性値、およびサブ要素を取得します。 XML データを変更する: addChild() メソッドと addAttribute() メソッドを使用して、新しい要素と属性を追加します。シリアル化された XML データ: asXML() メソッドは、SimpleXML オブジェクトを XML 文字列に変換します。実用的な例: 製品フィード XML を解析し、製品情報を抽出し、変換してデータベースに保存します。

JavaのJacksonライブラリを使用してPOJOをXMLに変換しますか? JavaのJacksonライブラリを使用してPOJOをXMLに変換しますか? Sep 18, 2023 pm 02:21 PM

Jackson は、Java オブジェクトから JSON へ、および JSON から Java オブジェクトへの変換に役立つ Java ベースのライブラリです。 JacksonAPI は他の API よりも高速で、必要なメモリ領域が少なく、大きなオブジェクトに適しています。 XmlMapper クラスの writeValueAsString() メソッドを使用して POJO を XML 形式に変換します。対応する POJO インスタンスをパラメーターとしてこのメ​​ソッドに渡す必要があります。構文 publicStringwriteValueAsString(Objectvalue)throwsJsonProcessingExceptionExampleimp

CおよびXML:関係とサポートの調査 CおよびXML:関係とサポートの調査 Apr 21, 2025 am 12:02 AM

Cは、サードパーティライブラリ(TinyXML、PUGIXML、XERCES-Cなど)を介してXMLと相互作用します。 1)ライブラリを使用してXMLファイルを解析し、それらをC処理可能なデータ構造に変換します。 2)XMLを生成するときは、Cデータ構造をXML形式に変換します。 3)実際のアプリケーションでは、XMLが構成ファイルとデータ交換に使用されることがよくあり、開発効率を向上させます。

PHP における HTML/XML パーサーの概要と使用法 PHP における HTML/XML パーサーの概要と使用法 Sep 10, 2023 pm 08:49 PM

PHP における HTML/XML パーサーの概要と使用法 はじめに Web アプリケーションを開発する場合、多くの場合、HTML または XML ドキュメントを処理する必要があります。一般的なサーバーサイド スクリプト言語として、PHP は強力な HTML/XML パーサーを提供し、これらのドキュメントの処理をより簡単かつ効率的にします。この記事では、PHP で一般的に使用される HTML/XML パーサーとその使用法を紹介します。 PHP の HTML パーサー: DOMDocumentDOMDocument は PHP の組み込みクラスです。

XML/RSSデータ統合:開発者および建築家向けの実用ガイド XML/RSSデータ統合:開発者および建築家向けの実用ガイド Apr 02, 2025 pm 02:12 PM

XML/RSSデータ統合は、XML/RSSファイルを解析および生成することで実現できます。 1)PythonのXML.Etree.ElementTreeまたはFeedParserライブラリを使用して、XML/RSSファイルを解析し、データを抽出します。 2)ElementTreeを使用してXML/RSSファイルを生成し、ノードとデータを徐々に追加します。

See all articles