tencent cloud

Web 应用防火墙

动态与公告
产品动态
产品公告
安全公告
新手指引
产品简介
产品概述
产品分类
产品优势
应用场景
套餐与版本说明
支持地域
基本概念
购买指南
计费概述
购买方式
升级方式
续费说明
欠费说明
退费说明
快速入门
入门概述
新手常见问题
操作指南
概览
接入管理
安全运营
防护策略
服务设置
实践教程
WAF 等保测评解读
BOT管理相关
API 安全相关
接入相关
防护与配置相关
API 文档
History
Introduction
API Category
Making API Requests
Asset Management APIs
Billing APIs
Protection Settings APIs
Other APIs
IP Management APIs
Integration APIs
Log Service APIs
Security Overview APIs
Rule Engine APIs
Data Types
Error Codes
常见问题
产品咨询相关
接入相关
使用相关
权限相关
沙箱隔离状态
服务等级协议
WAF 策略
隐私协议
数据处理和安全协议
联系我们
词汇表
文档Web 应用防火墙实践教程防护与配置相关前后端分离站点接入 WAF 验证码

前后端分离站点接入 WAF 验证码

PDF
聚焦模式
字号
最后更新时间: 2023-12-29 14:55:07
在前后端分离或 App 站点中接入 WAF 验证码,可以实现在前后端分离站点或 App 站点动态下发验证码。
前后端分离站点接入 WAF 验证码流程,适用于利用 WAF 进行 前后端分离站点动态进行人机验证的场景(如命中自定义规则、CC 攻击、BOT 流量管理等),App(iOS 和 Android) 皆使用 Web 前端 H5 方式进行接入。

前提条件

已购买 Web 应用防火墙(高级版及以上),并完成 接入 WAF

检出原理

通过动态识别服务端返回包中是否包含 WAF 下发的验证码的相关字段,如果包含 WAF 下发的验证码的相关信息时,在顶部浮层渲染验证码,实现前后端分离站点或 App 进行 WAF 站点验证码接入。

操作步骤

以下代码为接入WAF 验证码示例代码(以 axios 为例),根据应用场景,以此作为参考完成前后端分离站点的接入WAF 验证码。
1. Axios Response 增加 interceptors。
//WAF 验证码seqid相关正则
const sig_data = /seqid\\s=\\s"(\\w+)"/g
const waf_id_data = /TencentCaptcha\\((\\'\\d+\\')/g

const service = axios.create({
baseURL: '/api',
timeout: 10000,
withCredentials: true
});

service.interceptors.response.use((response)=>{
const res = response.data;
if(res.code === 0){
return res;
}else{
//捕捉错误及渲染验证码
const matches = sig_data.exec(res);
if(matches){
//展示验证码
let seqid = matches[1];
const wid_matches = waf_id_data.exec(res);
let wid = wid_matches[1]
var captcha = new TencentCaptcha(wid, function(res){
var captchaResult = []
captchaResult.push(res.ret)
if(res.ret === 0){
captchaResult.push(res.ticket)
captchaResult.push(res.randstr)
captchaResult.push(seqid)
}
var content = captchaResult.join('\\n')
axios.post(
"/WafCaptcha",content
).then().catch();
});
captcha.show()
}else{
return res;
}
}
},()=>{});
export default service;


Vue.prototype.$axios = service;
2. 调用 API 时使用增加 interceptors 的 axios。
getTopic:function(){
this.$axios.get("/api.php").then(res => {
this.topic = res
});
}
3. 全局引入验证码脚本 ,即在 public/index.html 引入 <script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
<!DOCTYPE html>
<html lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
<title><%= htmlWebpackPlugin.options.title %></title>
</head>
<body>
<noscript>
<strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
</noscript>
<script src="https://ssl.captcha.qq.com/TCaptcha.js"></script>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>
4. 输入上述代码后,编译并部署至服务器上即可。
5. 在 WAF 配置自定义规则,通过异步请求,查看当前页面是否展示验证码弹窗。


帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈