fix(static): 前端脚本识别 WAF 拦截响应并正确提示
- validation.js 新增 WafTip 公共检测:403 + 响应体含 blocked by WAF 双重特征, 与 gateway 白名单拒绝的 403(JSON 错误消息)精确区分 - login/register/dnfs/view 各请求点在 JSON 解析前识别拦截,统一提示 「请求被 WAF 安全规则拦截,请检查输入内容」 - 修复 dnfs getNode 被 WAF 拦截时落入 catch 误跳登录页的问题 - 验证码图片加载识别 403 拦截,alt 提示点击重试 - __view.html 补充引入 validation.js
This commit is contained in:
1 parent
40175eddb5
commit
9765edac9b
6 files changed
+34
-1
No files matched your search
@@ -22,6 +22,11 @@ async function refreshCaptcha() {
|
||||
captchaToken = '';
|
||||
try {
|
||||
const res = await fetch('/captcha/image', { cache: 'no-store' });
|
||||
if (res.status === 403) { // WAF 拦截:body 非图片,提示后待用户点击重试
|
||||
captchaImg.removeAttribute('src');
|
||||
captchaImg.alt = '验证码加载被安全规则拦截,点击重试';
|
||||
return;
|
||||
}
|
||||
if (!res.ok) throw new Error('captcha load failed');
|
||||
captchaToken = res.headers.get('X-Captcha-Token') || '';
|
||||
const blob = await res.blob();
|
||||
@@ -126,6 +131,7 @@ form.addEventListener('submit', async function(e) {
|
||||
body: jsonBody
|
||||
});
|
||||
const responseText = await res.text();
|
||||
if (window.WafTip && WafTip.isBlocked(res, responseText)) throw new Error(WafTip.MESSAGE);
|
||||
let result;
|
||||
try { result = JSON.parse(responseText); } catch { throw new Error('服务器响应格式异常'); }
|
||||
if (!res.ok) throw new Error(result.message || '登录失败');
|
||||
|
||||
Reference in new issue
Block a user