编辑自定义控制规则¶
1. 接口描述¶
接口请求路径:POST /prod-api/waf/nlaV1/custom/rules/modifyCustomRule
modifyCustomRule 用于编辑已有自定义控制规则,请求体须携带 customRuleId。创建场景(省略 customRuleId)见 创建自定义控制规则。默认规则(ruleClass=default)不可编辑。
Token 获取方式见 密钥鉴权。
2. 输入参数¶
以下请求参数列表仅列出了接口请求参数和部分公共参数,完整公共参数列表见 公共请求参数。
| 参数名称 | 必选 | 类型 | 描述 |
|---|---|---|---|
| customRuleId | 是 | Long | 待编辑的自定义规则 ID 示例值: 128 |
| aclId | 是 | Long | 所属策略组 ID 示例值: 74 |
| ruleMessage | 是 | String | 规则名称,最长 30 字符;不可含 \、'、"示例值: deemo |
| status | 是 | String | 启用状态,支持以下值:enable:启用disable:关闭示例值: enable |
| rules | 是 | Object | 规则内容,见 NlaCustomRuleVO |
| sort | 否 | Integer | 排序权重 |
3. 示例¶
示例1 编辑鉴权规则¶
输入示例¶
{
"customRuleId": 128,
"ruleMessage": "deemo",
"status": "enable",
"aclId": 74,
"rules": {
"conditions": [
[
{
"target": "HOST",
"operator": "EQ",
"values": ["test.ruisuyun.com"],
"name": "HOST"
},
{
"target": "REQUEST_URI",
"operator": "ENDS_WITH",
"values": ["js", "png", "jpg"],
"name": "REQUEST_URI"
}
]
],
"action": {
"action": "AUTHENTICATION",
"parameters": [
{ "name": "log", "values": ["log"] },
{ "name": "validType", "values": ["A"] },
{ "name": "signatureParameterName", "values": ["x-security-auth"] },
{ "name": "validTime", "values": ["2"] },
{
"name": "authKey",
"values": ["HiUUyUEYMIVvjXFohjpDuej3MP", "Age4YqyEtPQnfcuThgyrDL8GBD"]
}
]
}
}
}
代码调用¶
请将 {登录域名}、token 替换为实际值。
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
public class ModifyCustomRuleTest {
public static void main(String[] args) throws Exception {
String url = "https://{登录域名}/prod-api/waf/nlaV1/custom/rules/modifyCustomRule";
String token = "eyJhbGciOiJIUzUxMiJ9.xxxxxx";
String requestBody = "{"
+ "\"customRuleId\":128,"
+ "\"ruleMessage\":\"deemo\","
+ "\"status\":\"enable\","
+ "\"aclId\":74,"
+ "\"rules\":{"
+ "\"conditions\":[[{"
+ "\"target\":\"HOST\",\"operator\":\"EQ\","
+ "\"values\":[\"test.ruisuyun.com\"],\"name\":\"HOST\""
+ "}]],"
+ "\"action\":{"
+ "\"action\":\"DENY\","
+ "\"parameters\":["
+ "{\"name\":\"log\",\"values\":[\"log\"]},"
+ "{\"name\":\"statusCode\",\"values\":[\"418\"]}"
+ "]"
+ "}"
+ "}"
+ "}";
try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Authorization", "Bearer " + token);
httpPost.setEntity(new StringEntity(requestBody, ContentType.APPLICATION_JSON));
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
int statusCode = response.getStatusLine().getStatusCode();
String body = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println("Status Code: " + statusCode);
System.out.println("Body: " + body);
}
}
}
}
package main
import (
"bytes"
"fmt"
"io"
"net/http"
)
func main() {
url := "https://{登录域名}/prod-api/waf/nlaV1/custom/rules/modifyCustomRule"
token := "eyJhbGciOiJIUzUxMiJ9.xxxxxx"
requestBody := []byte(`{
"customRuleId": 128,
"ruleMessage": "deemo",
"status": "enable",
"aclId": 74,
"rules": {
"conditions": [[{
"target": "HOST",
"operator": "EQ",
"values": ["test.ruisuyun.com"],
"name": "HOST"
}]],
"action": {
"action": "DENY",
"parameters": [
{"name": "log", "values": ["log"]},
{"name": "statusCode", "values": ["418"]}
]
}
}
}`)
req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(requestBody))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+token)
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
fmt.Println("Status Code:", resp.StatusCode)
fmt.Println("Body:", string(body))
}
输出示例¶
4. 输出参数¶
| 参数名称 | 类型 | 描述 |
|---|---|---|
| code | Integer | 状态码。示例值:200 |
| msg | String | 提示信息。示例值:成功 |
| data | Long | 被编辑规则的 customRuleId。示例值:128 |
5. 错误码¶
| HTTP 状态码 / 业务提示 | 描述 |
|---|---|
| 200 | 成功 |
| 401 | 未鉴权或 Token 无效 |
| 403 | 无权限 |
| 规则描述不能为空 | ruleMessage 为空 |
| 执行动作不能为空 | rules.action 为空 |
| 失败,定制规则无法编辑 | 默认规则不可编辑 |
| 规则描述中不能包含特殊字符 | ruleMessage 含 \、' 或 " |
| 状态[status]只能为disable或enable | status 取值非法 |
6. 数据模型¶
NlaCustomRuleVO¶
| 参数名称 | 类型 | 描述 |
|---|---|---|
| action | Object | 命中后动作 |
| action.action | String | 动作编码,支持以下值:DENY:拦截LOG:仅记录ALLOW:跳过后续规则LIMIT_RATE:频率限速CAPTCHA:人机验证DETECTION_ROBOT:验证爬虫REDIRECT:重定向AUTHENTICATION:鉴权示例值: AUTHENTICATION |
| action.parameters | Array | 动作参数;每项为 { "name", "values" } |
| action.parameters[].name | String | 参数键。常见:log、statusCode、url、traits、limit_access、limit_time、behavior、limit_blacklist、validType、signatureParameterName、validTime、authKey |
| action.parameters[].values | Array of String | 参数值列表 |
| conditions | Array | 条件组二维数组;组内为与关系 |
| conditions[][].target | String | 匹配维度,与 查询条件参数 一致 |
| conditions[][].operator | String | 运算符,如 EQ、ENDS_WITH |
| conditions[][].name | String | 维度名,常与 target 相同 |
| conditions[][].values | Array of String | 比较取值 |
| conditions[][].conditionId | Long | 已有条件的持久化 ID;新建条件可省略 |