yushijinhun / authlib-injector

Build your own Minecraft authentication system.
https://authlib-injector.yushi.moe
GNU Affero General Public License v3.0
749 stars 67 forks source link

新的 skinDomains 匹配方法 #91

Closed yushijinhun closed 3 years ago

yushijinhun commented 3 years ago

此 PR 使用了新的 skinDomains 匹配方法,以规避原先方法可能带来的安全问题。

问题背景

API 元数据 中包含了一项名为 skinDomains 的属性,即材质白名单。仅当材质 URL 的域名匹配白名单中的规则时,Minecraft 才会下载这一材质。引入这一机制的原因见 MC-78491

目前,authlib-injector 使用的匹配方法沿用自原版 MC,具体为:材质域名须以白名单中的任意一项结尾。例如:

如果您要匹配 example.com 下的子域名,您可以使用 .example.com 规则,这并无问题;但若您要匹配 example.com 这个顶级域名,您就必须使用 example.com 规则,example.com 与此同时也会匹配 eexample.com,而这就造成了潜在的安全问题

解决方法

skinDomains 的匹配方法修改为如下:

兼容性

由于新的匹配方法更为严格,因此可能造成兼容性问题。

如果您使用单条规则(如 example.com)去同时匹配某个域名(如 example.com)及其下的子域名(如 a.example.com),这将不再有效。您需要使用 example.com(匹配顶级域名)和 .example.com(匹配子域名)两条规则。