Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: add new cors response #1305

Open
wants to merge 22 commits into
base: dev-next
Choose a base branch
from
Open

Conversation

PuerNya
Copy link
Contributor

@PuerNya PuerNya commented Dec 27, 2023

自从 chrome 98 开始,google 提出了一个新的功能,对专用网络资源访问进行预检 ,它的前身是来自 W3C 社区的 此草案 。在高版本 chrome 中已出现因此无法使用网络面板进行控制的情况(特指搭载在开放网络上的公用网络面板而非由核心拉起的本地网络面板),故对 Preflight request 添加相应响应头,使浏览器按预期进行工作。

@PuerNya PuerNya force-pushed the set-new-cors branch 2 times, most recently from f18aff3 to 7b663da Compare December 27, 2023 08:20
@nekohasekai
Copy link
Member

我认为应该通过配置项添加允许的域,而不是允许所有,因为网传已经存在通过浏览器发起的对 Clash API 的攻击。

@PuerNya PuerNya force-pushed the set-new-cors branch 2 times, most recently from 6917369 to e1d9843 Compare December 30, 2023 15:12
@PuerNya
Copy link
Contributor Author

PuerNya commented Dec 30, 2023

我认为应该通过配置项添加允许的域,而不是允许所有,因为网传已经存在通过浏览器发起的对 Clash API 的攻击。

我们在 experimental.clash_api.external_controller 中已经设定了 Clash API 的监听范围,也通过 experimental.clash_api.secret 设定了校验密钥,再次设定控制域是否存在逻辑过于复杂且并无必要的情况?

同时必须指出的是,不论是在稍低版本的 chromium 和 firefox 中还是透过后端程序发起的请求,此 CORS 校验并不会生效,因此它的影响力并没有那么大。

我认为,我们应该引导用户正确设定 Clash API 的监听范围并设定一定复杂度的校验密钥,从而规避可能存在的风险而不是对一个影响力本不大的 CORS 校验设计过于复杂的校验逻辑

@nekohasekai
Copy link
Member

你似乎没有把握住诸如此类攻击的运作原理,浏览器对本机 API 发起的请求是建立在绝大多数用户并不会改动端口和秘钥的基础上的。

你对于增加在新版浏览器上安全设定的简单计划表述为 过度复杂和并无必要,这点让我有些费解。第二段的内容也让我纳闷,新的 API 并不会影响在旧版浏览器上的攻击,所以没有必要进行对应设置,这个逻辑有些令人捉摸不透。

设定面板的域名明显比秘钥更为方便,哪里复杂不必要?因为秘钥只需要口头 “引导” 设置,不允许所有请求却增加了 无法作出任何贡献也理解不了配置的最终用户 的使用成本,底层逻辑是一种开源项目应该服务小白来换取非道德的影响力的狗稍。

作为一个开发者,建议你好好学习如何使用简体中文,避免写出这种看起来像文游一样的东西。

@PuerNya
Copy link
Contributor Author

PuerNya commented Dec 31, 2023

我已理解并赞同你所说。让用户去配置他们所信任的面板域名并不是一个很坏的设定,我将新增一个配置项在 experimantal.clash_api 下以供用户配置他们的信任域。

另外我还有一个问题,我们是否需要在代码中硬编码一些开源的被广为使用的面板项目通过 gh page 或者 cf pages 托管的网络面板域名作为内置信任名单呢。比如:haishanh/yacd MetaCubeX/Yacd-meta MetaCubeX/metacubexd

@nekohasekai nekohasekai force-pushed the dev-next branch 3 times, most recently from e92148f to 1ce8ae6 Compare January 5, 2024 05:48
@nekohasekai nekohasekai force-pushed the dev-next branch 3 times, most recently from b29e1fb to bb7b299 Compare January 16, 2024 23:50
@nekohasekai nekohasekai force-pushed the dev-next branch 2 times, most recently from 83d40ce to 63e61ed Compare February 6, 2024 09:56
@nekohasekai nekohasekai force-pushed the dev-next branch 30 times, most recently from be13007 to 492934f Compare December 15, 2024 14:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants