Go语言如何规定当解析器在 XML 文档中找到外部实体时被调用的函数
编程小王子
2024-04-02 17:21
这篇文章将为大家详细讲解有关Go语言如何规定当解析器在 XML 文档中找到外部实体时被调用的函数,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Go 语言解析 XML 外部实体
当 Go 语言解析器在 XML 文档中发现外部实体时,它会调用以下函数:
unsafe.AllowedExternalEntities
unsafe.AllowedExternalEntities
函数允许外部实体,该函数接受一个 map[string]bool
作为参数,其中键是外部实体的公共标识符(PUBLIC ID),值是指示外部实体是否允许的布尔值。如果外部实体的公共标识符不在映射中,则不允许该实体。
示例:
import "unsafe"
func main() {
unsafe.AllowedExternalEntities = map[string]bool{
"http://www.example.com/entity1.dtd": true,
"http://www.example.com/entity2.dtd": false,
}
}
在上面的示例中,解析器将允许 http://www.example.com/entity1.dtd
外部实体,但会禁止 http://www.example.com/entity2.dtd
外部实体。
unsafe.AllowExternalEntitiesGlob
unsafe.AllowExternalEntitiesGlob
函数使用 glob 模式允许外部实体。该函数接受一个字符串参数,该参数指定允许哪些外部实体。如果外部实体的公共标识符与 glob 模式匹配,则允许该实体。
示例:
import "unsafe"
func main() {
unsafe.AllowExternalEntitiesGlob = "*.dtd"
}
在上面的示例中,解析器将允许所有以 .dtd
结尾的外部实体。
禁用外部实体解析
如果不想解析任何外部实体,可以使用以下函数禁用解析:
unsafe.DisallowExternalEntities
unsafe.DisallowExternalEntities
函数禁用外部实体解析。
示例:
import "unsafe"
func main() {
unsafe.DisallowExternalEntities = true
}
在上面的示例中,解析器将禁止解析所有外部实体。
注意
使用外部实体可能会带来安全风险。攻击者可能会利用外部实体来注入恶意代码或攻击应用程序。因此,在允许外部实体时应格外小心。
以上就是Go语言如何规定当解析器在 XML 文档中找到外部实体时被调用的函数的详细内容,更多请关注编程学习网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341