mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-09-16 15:17:14 +00:00
fix(sub): prevent default profile page URL disclosure (#6538)
* fix(sub): prevent default profile page URL disclosure Add explicit none, builtin, and custom profile page modes. Preserve existing custom URLs and warn before exposing the built-in page. Cover mode selection, legacy settings, and subscription response headers. * fix(subscription): add profile page link options and upgrade notes
This commit is contained in:
@@ -94,6 +94,25 @@ Subscriptions return standard headers that compatible apps read:
|
||||
- **`Profile-Title`**, **`Support-Url`**, **`Profile-Web-Page-Url`**,
|
||||
**`Announce`** — optional branding shown by some clients.
|
||||
|
||||
### Profile page links and upgrades
|
||||
|
||||
In **Subscription → Profile → Profile page**, choose `subProfileMode` for all
|
||||
subscription clients:
|
||||
|
||||
- **No link** (`none`, default): omit `Profile-Web-Page-Url`.
|
||||
- **Built-in subscription page** (`builtin`): link to the client's built-in page.
|
||||
- **Custom website** (`custom`): use `subProfileUrl`; a blank URL omits the header.
|
||||
|
||||
**Upgrade note:** previously, an empty `subProfileUrl` automatically linked to
|
||||
the built-in page. After upgrading, an unset mode with an empty or whitespace-only
|
||||
URL becomes **No link**; an existing nonempty URL remains a **Custom website**.
|
||||
To restore the built-in link, select **Built-in subscription page** above and
|
||||
save the settings.
|
||||
|
||||
The built-in page exposes subscription URLs and node configurations, including
|
||||
for Happ encrypted subscriptions. Enable it only if you intend to provide that
|
||||
access.
|
||||
|
||||
### Optional month-end expiry display
|
||||
|
||||
Under **Subscription → Information**, **Month-end subscription expiry display**
|
||||
|
||||
@@ -72,6 +72,23 @@ SOCKS/HTTP روی 127.0.0.1، DNS، مسیریابی، policy) بهعلاوه
|
||||
- **`Profile-Title`**، **`Support-Url`**، **`Profile-Web-Page-Url`**،
|
||||
**`Announce`** — برندینگ اختیاری که برخی کلاینتها نمایش میدهند.
|
||||
|
||||
### لینک صفحه پروفایل
|
||||
|
||||
در تنظیمات **سابسکریپشن ← پروفایل**، گزینه **صفحه پروفایل** (`subProfileMode`)
|
||||
لینک را برای همه کلاینتهای اشتراک کنترل میکند:
|
||||
|
||||
- **بدون لینک** (`none`، پیشفرض) — هدر `Profile-Web-Page-Url` ارسال نمیشود.
|
||||
- **صفحه اشتراک داخلی** (`builtin`) — لینک صفحه اشتراک داخلی ارائه میشود.
|
||||
- **وبسایت سفارشی** (`custom`) — آدرس `subProfileUrl` استفاده میشود؛ اگر خالی باشد، هدر ارسال نمیشود.
|
||||
|
||||
**پس از ارتقا:** اگر `subProfileMode` هنوز تنظیم نشده و مقدار قبلی `subProfileUrl`
|
||||
خالی یا فقط شامل فاصله باشد، بهجای لینک خودکار صفحه داخلی، حالت **بدون لینک**
|
||||
انتخاب میشود. آدرس سفارشی غیرخالی قبلی در حالت **وبسایت سفارشی** حفظ میشود.
|
||||
|
||||
برای بازگرداندن لینک قبلی، در همین بخش **صفحه اشتراک داخلی** را انتخاب و تنظیمات
|
||||
را ذخیره کنید. این صفحه آدرسهای اشتراک و پیکربندی گرهها را آشکار میکند، حتی
|
||||
برای اشتراکهای رمزگذاریشده Happ.
|
||||
|
||||
## قالبهای سفارشی صفحه
|
||||
|
||||
برای برندینگ صفحهی HTML اشتراک، `subThemeDir` را به یک پوشهی حاوی قالب سفارشیِ
|
||||
|
||||
@@ -76,6 +76,24 @@ policy) плюс исходящее соединение `proxy`, указыва
|
||||
- **`Profile-Title`**, **`Support-Url`**, **`Profile-Web-Page-Url`**,
|
||||
**`Announce`** — необязательный брендинг, отображаемый некоторыми клиентами.
|
||||
|
||||
### Ссылка на страницу профиля
|
||||
|
||||
В настройках **Подписка → Профиль** поле **Страница профиля** (`subProfileMode`)
|
||||
управляет ссылкой для всех клиентов подписки:
|
||||
|
||||
- **Без ссылки** (`none`, по умолчанию) — заголовок `Profile-Web-Page-Url` не отправляется.
|
||||
- **Встроенная страница подписки** (`builtin`) — ссылка на встроенную страницу подписки.
|
||||
- **Свой сайт** (`custom`) — адрес из `subProfileUrl`; если он пуст, заголовок не отправляется.
|
||||
|
||||
**После обновления:** если `subProfileMode` ещё не задан, а прежний `subProfileUrl`
|
||||
пуст или содержит только пробелы, вместо автоматической ссылки на встроенную
|
||||
страницу теперь используется **Без ссылки**. Существующий непустой пользовательский
|
||||
адрес сохраняется в режиме **Свой сайт**.
|
||||
|
||||
Чтобы вернуть прежнюю ссылку, выберите **Встроенная страница подписки** в этом поле
|
||||
и сохраните настройки. Эта страница раскрывает URL-адреса подписок и конфигурации
|
||||
узлов, в том числе для зашифрованных подписок Happ.
|
||||
|
||||
## Пользовательские шаблоны страниц
|
||||
|
||||
Укажите в `subThemeDir` папку с пользовательским шаблоном информационной
|
||||
|
||||
@@ -73,6 +73,18 @@ Clash 格式自动识别保留原有的 `(?i)(clash|mihomo)` 默认匹配器,
|
||||
- **`Profile-Update-Interval`** —— 刷新间隔,以小时为单位(`subUpdates`)。
|
||||
- **`Profile-Title`**、**`Support-Url`**、**`Profile-Web-Page-Url`**、**`Announce`** —— 部分客户端会显示的可选品牌信息。
|
||||
|
||||
### 资料页链接与升级说明
|
||||
|
||||
在 **订阅 → 资料 → 资料页方式** 中选择 `subProfileMode`,对所有订阅客户端生效:
|
||||
|
||||
- **不提供**(`none`,默认):不发送 `Profile-Web-Page-Url`。
|
||||
- **内置订阅页**(`builtin`):提供该客户端的内置订阅页链接。
|
||||
- **自定义网站**(`custom`):使用 `subProfileUrl`;地址留空时不发送该响应头。
|
||||
|
||||
**升级提示:** 旧版在 `subProfileUrl` 留空时会自动提供内置订阅页链接。升级后,尚未设置模式且地址为空或仅含空白字符的配置会使用 **不提供**;已有非空地址继续使用 **自定义网站**。需要恢复内置入口时,在上述位置选择 **内置订阅页** 并保存设置。
|
||||
|
||||
内置订阅页会公开订阅地址和节点配置,Happ 加密订阅也不例外;请在确定需要提供这些内容时开启。
|
||||
|
||||
## 自定义页面模板
|
||||
|
||||
将 `subThemeDir` 指向一个包含自定义信息页模板的文件夹,即可为 HTML 订阅页面定制品牌。每条链接上的客户端备注完全支持模板化 —— 参见[分享链接 → 备注变量](/docs/config/share-links#remark-template-variables)。
|
||||
|
||||
Reference in New Issue
Block a user