0
<?xml version="1.0" ?>
<!DOCTYPE list [
<!ELEMENT list (bsinfo+)>
<!ELEMENT bsinfo (id,title,desc,books)>
]>

<list>
<bsinfo>

私のプロジェクトでは、XML に DTD が含まれているかどうかを検証したいと考えています。現在、Libxml パーサーを使用して XML を解析しています。

LibXML では、XML に DTD が含まれているかどうかを確認するにはどうすればよいですか。

リクエスト XML をサーバーに送信するときに、XXE 攻撃を防ぐにはどうすればよいですか。

4

1 に答える 1

0

「XML に DTD が含まれているかどうかを検証したい」と言うとき、(a) 「ドキュメントに存在する DTD がある場合はそれを使用し、そうでない場合は myfine.dtd の DTD を使用したい」という意味ですか? または (b) 「XML インスタンスに何が存在するかに関係なく、onetrue.dtd に対して検証したい」?

(a) の場合、ドキュメント タイプ宣言をテストする 1 つの方法は、ドキュメントをロードし、適切な正規表現を適用して文字列 '

(b) の場合、XML に DTD への参照が含まれているかどうかを確認する必要はありません。xmllint --dtdvalid オプションに相当する C API を使用して、onetrue.dtd に対して検証するように libxml に指示するだけです。また、容認できないエンティティの DTD にエンティティ宣言を含めないことで、容認できない外部エンティティまたは内部エンティティから保護します。

これらの回答はどちらも、「リクエスト XML をサーバーに送信しているときに XXE 攻撃を防ぐにはどうすればよいですか」と尋ねたときに、リクエスターではなくサーバーを XXE 攻撃から保護しようとしていることを前提としています。エンティティ処理を使用してリクエスターを攻撃する方法がわからないため、リクエスターを保護する方法がわかりません。

于 2016-01-29T15:34:35.717 に答える