0x00 前言
在上一遍文章中提到了XML的格式定义DTD存在外部实体引用攻击,这次来学习一下主流的XML格式定义XML Schema,刚好最近上了java的spring培训,里面定义beans的时候主要配置的就是XML文档,所以也是时候再学学xml的相关知识了,网上很多相关文章,主要记录一些和安全相关的设置吧
0x01 XML Schema 基础
XML Schema 描述了 XML文档的结构,也是由 XML 编写,其中Schema可以理解为约束、概要,但不推荐使用中文进行记忆,Schema就是Schema
- 一个普通的xml文档:
<?xml version="1.0"?> |
- 一个XML Schema定义
<?xml version="1.0"?> |
- 第一句代表xml版本号,1.0版本
- xmlns:xs=”http://www.w3.org/2001/XMLSchema“ 代表schema 中用到的元素和数据类型来自命名空间 “http://www.w3.org/2001/XMLSchema"。同时它还规定了来自命名空间 “http://www.w3.org/2001/XMLSchema“ 的元素和数据类型应该使用前缀 xs:
- targetNamespace=”http://www.runoob.com“ 显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: “http://www.runoob.com"。
- xmlns=”http://www.runoob.com“ xmlns=”http://www.runoob.com“
- elementFormDefault=”qualified” 指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。
- 后面是各种元素定义,数据类型定义等
详细的关于XML Schema定义可以参考下面的链接
http://www.runoob.com/schema/schema-schema.html
- xml文档引用上面定义的Schema:note.xsd(这是重点要理解的)
<?xml version="1.0"?> |
- xmlns=”http://www.w3schools.com“ 定义了默认的命名空间,如果没有定义其他的命名空间,XML 文档会使用这个作为schema 验证器
- xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance“ 定义了一个指定的命名空间,并把这个空间 alias - xsi(别名)
- xsi:schemaLocation=”http://www.w3schools.com note.xsd”> 定义了xsi的schemaLocation属性,格式为:namespace and XSD-location-URI,中间用换行符或者空格作为分隔符
下来来自stackoverflow的详细解释,好明白的讲解:
https://stackoverflow.com/questions/34202967/xmlns-xmlnsxsi-xsischemalocation-and-targetnamespace
0x02 XML Schema攻击的分类
XML Schema攻击分为,下面的没有怎么研究,希望日后可以补充,都是看家人的总结来的
1.schemaLocation
2.noNamespaceSchemaLocation
3.XInclude。
4.XSLT 攻击
refer link