第20
XML外部エンティティ注入
XML外部エンティティ注入
アウトライン
XMLは、送信するために使用される拡張可能マークアップ言語、ストアデータであります
データを表示するために使用されるHTML
著者が独自のタグと文書構造を定義することができていない事前に定義されたタグやXML。
構図
評判
<?xml version="1.0" encoding="UTF-8"?>
上記の例は、(XMLバージョンを含みます
UTF-8は、HTML5、CSS、JavaScriptやPHP、SQL、およびデフォルトのエンコーディングです。
XMLのDTD
文書型定義DTD(文書型定義)は、以下の文書要素の規定は制約がフォーマットを定義と呼ぶことができます
<!DOCTYPE note SYSTEM "Note.dtd">
DOCTYPE宣言は、外部DTDファイルへの参照であります
ドキュメントの要素
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
利用
私たちは、DTDを使用できる外部ドキュメントの導入の一部であり、
XML文書には、制約のセマンティクスを定義します
3つの方法があります。
- 内部DTDの名声:<DOCTYPEルート要素[要素名声]!>
- DTDの外部評判:<!「DTD URIの外に」DOCTYPEルート要素名SYSTEM>外部参照は、HTTP、ファイルおよびFTPをサポート
- パブリックDTDを引用:<!DOCTYPEルート要素名PUBLIC "パブリックDTDのURI">
<!DOCTYPE note
[
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
インターフェイスがサポートするXMLデータのセキュリティ対策のいずれかを行うことなく、XMLデータを受け入れる場合、それはXXE脆弱性を引き起こす可能性があります。
libxml 2.9.0後(付属)デフォルトの解決のxmlデフォルトのエンティティのコンテンツでは無効になっています。
用例
<?xml cersion="1.0">
<!DOCTYPE hack [
<!ENTITY xxe SYSTEM "file:///etc/password">
]>
<hack>&xxe;</hack>
XML文書内で参照されている;「%名」(パラメタ実体)本当にDTDが参照され、「&名前」。
あなたは、任意の合意をサポートする方法を確認するために、特定の参照を使用することができます
https://security.tencent.com/index.php/blog/msg/69
防衛
言語の開発に外部エンティティの使用を無効にするオプションの一つの方法
PHPを:
libxml_disable_entity_loader(真の);
他の言語:
https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet
オプションII、データのXML提出フィルターユーザー
のキーワード:, SYSTEMおよびPUBLIC。
参考:
https://security.tencent.com/index.php/blog/msg/69