问题的原因

SdRKcVvTSExEOstqH7x7bBpxyt11JiHa.webp

虽然被打码了,但是如何你去比对diagnosis的request headers你会发现X-Csrf-Token一摸一样被重复了两边,但是cookie里只有一遍,随意才会导致validation failed。

换了一个全新的浏览器或是清楚所有数据后再次访问使用也是一样的情况,说明这是DStatus的前端错误,面板前端脚本本身把这个头加了两次,base-utils.bundle 和 csrf-helper 各包装一层才导致的错误。

临时解决办法

这个问题已经反馈到了开发者那边,什么时候修复就不得而知了,不过也有临时的解决方案,只对 MTR 这个接口把重复的两段还原成一段就可以解决了,以caddy为例:

your_domain {
  @mtr path_regexp ^/api/admin/v1/servers/[^/]+/mtr/diagnose$

  handle @mtr {
    reverse_proxy 127.0.0.1:5555 {
      header_up Host your_domain
      header_up X-Forwarded-Host your_domain
      header_up X-Forwarded-Proto {scheme}
      header_up X-Csrf-Token "^([0-9a-fA-F]{64}), *[0-9a-fA-F]{64}$" "$1"
    }
  }

  handle {
    reverse_proxy 127.0.0.1:5555 {
      header_up Host your_domain
      header_up X-Forwarded-Host your_domain
      header_up X-Forwarded-Proto {scheme}
    }
  }
}