XMPP正式RFC标准
做个记录,:)
4.3. 流的安全
在XMPP 1.0中,当XML流开始握手时,TLS应该(SHOULD)按 第五章:TLS的使用 中的规定来使用,SASL必须(MUST)按第六章:SASL的使用中的规定来使用。尽管可能(MAY)存在某种共有的机制能够保证双向安全,但是“初始化流”(比如从初始化实体发给接收实体的流)和“应答流”(比如从接收实体发给初始化实体的流)还是必须(MUST)安全的分开。在流被验证之间,实体不应该(SHOULD NOT)尝试通过流发送XML节(第九章);就算它这样做了,对方的实体也不能(MUST NOT)接受这些XML节,并且应该(SHOULD)返回一个
接收实体必须(MUST)在应答流的头信息中把'版本'的值设置成初始化实体所提供的版本或它所支持的最高版本,取其中版本号较低的那一个。接收实体必须(MUST)把主版本号和副版本号作为数字来比较,而不是对"主版本号.副版本号"这个字符串进行比较.
一个用户必须完成以下用例:
引用
* 和其他用户交换消息
* 和其他用户交换出席信息
* 管理和其他用户之间的订阅和被订阅
* 管理联系人列表中的条目(在 XMPP 中这被称为 "roster")
* 屏蔽和特定的其他用户之间的通信(出或入)
* 和其他用户交换出席信息
* 管理和其他用户之间的订阅和被订阅
* 管理联系人列表中的条目(在 XMPP 中这被称为 "roster")
* 屏蔽和特定的其他用户之间的通信(出或入)
关于XML生成, 一个XMPP实现不能(MUST NOT)在XML流中注入以下任何东西:
引用
* 注释 (第二章第五节[XML])
* 处理指示(第二章第六节 同上)
* 内部或外部的 DTD 子集 (第二章第八节 同上)
* 内部或外部的实体参考 (第四章第二节 同上) 除了预定实体以外(第四章第六节 同上)
* 字符数据或属性值包含和预定实体列表中吻合的未逃逸的unescaped字符(第四章第六节 同上); 这些字符必须(MUST)逃逸
* 处理指示(第二章第六节 同上)
* 内部或外部的 DTD 子集 (第二章第八节 同上)
* 内部或外部的实体参考 (第四章第二节 同上) 除了预定实体以外(第四章第六节 同上)
* 字符数据或属性值包含和预定实体列表中吻合的未逃逸的unescaped字符(第四章第六节 同上); 这些字符必须(MUST)逃逸
关于XML处理, 如果一个XMPP实现接收到这些受限的XML数据,它必须(MUST)忽略这些数据.
引用
12.1. 服务器
除了所有已定义的关于安全, XML使用, 和国际化的要求之外, 一个服务器还必须(MUST)支持以下核心协议以保证兼容性:
* 在地址中应用[STRINGPREP] 的 [NAMEPREP], Nodeprep (附录 A),和 Resourceprep (附录 B) profiles (包括确保域ID是[IDNA]中定义的国际化域名)
* XML流(第四章), 包括Use of TLS(第五章), Use of SASL(第六章), 和Resource Binding (第七章)
* 三个在stanza semantics(第九章第二节)中已定义的节类型(即, , , 和 )的基本语义
* 生成错误的语法及相关的流, TLS, SASL, 和 XML节的语义
另外, 一个服务器可以(MAY)支持以下核心协议:
* 服务器回拨 (第八章)
除了所有已定义的关于安全, XML使用, 和国际化的要求之外, 一个服务器还必须(MUST)支持以下核心协议以保证兼容性:
* 在地址中应用[STRINGPREP] 的 [NAMEPREP], Nodeprep (附录 A),和 Resourceprep (附录 B) profiles (包括确保域ID是[IDNA]中定义的国际化域名)
* XML流(第四章), 包括Use of TLS(第五章), Use of SASL(第六章), 和Resource Binding (第七章)
* 三个在stanza semantics(第九章第二节)中已定义的节类型(即,
* 生成错误的语法及相关的流, TLS, SASL, 和 XML节的语义
另外, 一个服务器可以(MAY)支持以下核心协议:
* 服务器回拨 (第八章)