更新时间:2024-03-22 GMT+08:00
分享

更新cc防护规则

功能介绍

更新cc防护规则

调用方法

请参见如何调用API

URI

PUT /v1/{project_id}/waf/policy/{policy_id}/cc/{rule_id}

表1 路径参数

参数

是否必选

参数类型

描述

project_id

String

项目ID,对应华为云控制台用户名->我的凭证->项目列表->项目ID

policy_id

String

策略id(策略id从查询防护策略列表接口获取)

rule_id

String

cc规则的ID。可以通过调用ListCcRules API获取。

表2 Query参数

参数

是否必选

参数类型

描述

enterprise_project_id

String

您可以通过调用企业项目管理服务(EPS)的查询企业项目列表接口(ListEnterpriseProject)查询企业项目id

请求参数

表3 请求Header参数

参数

是否必选

参数类型

描述

X-Auth-Token

String

用户Token,通过调用IAM服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。

Content-Type

String

内容类型

缺省值:application/json;charset=utf8

表4 请求Body参数

参数

是否必选

参数类型

描述

name

String

规则名称

mode

Integer

cc规则防护模式,对应console上的mode,现在只支持创建高级cc规则防护模式。

  • 0:标准,只支持对域名的防护路径做限制。

  • 1:高级,支持对路径、IP、Cookie、Header、Params字段做限制。

枚举值:

  • 0

  • 1

url

String

需要防护的域名路径,当cc防护规则为标准模式(mode参数值为0)时,该参数必填。

conditions

Array of CcCondition objects

cc规则防护规则限速条件,当cc防护规则为高级模式(mode参数值为1)时,该参数必填。

action

action object

请求次数限制到达后采取的防护动作

tag_type

String

限速模式:

  • ip:IP限速,根据IP区分单个Web访问者。

  • cookie:用户限速,根据Cookie键值区分单个Web访问者。

  • header:用户限速,根据Header区分单个Web访问者。

  • other:根据Referer(自定义请求访问的来源)字段区分单个Web访问者。

  • policy: 策略限速

  • domain: 域名限速

  • url: url限速

枚举值:

  • ip

  • cookie

  • header

  • other

  • policy

  • domain

  • url

tag_index

String

用户标识,当限速模式为用户限速(cookie或header)时,需要传该参数。

  • 选择cookie时,设置cookie字段名,即用户需要根据网站实际情况配置唯一可识别Web访问者的cookie中的某属性变量名。用户标识的cookie,不支持正则,必须完全匹配。例如:如果网站使用cookie中的某个字段name唯一标识用户,那么可以选取name字段来区分Web访问者。

  • 选择header时,设置需要防护的自定义HTTP首部,即用户需要根据网站实际情况配置可识别Web访问者的HTTP首部。

tag_condition

tag_condition object

用户标识,当限速模式为other时,需要传该参数。根据Referer(自定义请求访问的来源)字段区分单个Web访问者

limit_num

Integer

限制频率,单位为次,范围为1~2147483647

limit_period

Integer

限速周期,单位为秒,范围1~3600

unlock_num

Integer

放行频率,单位为次,范围为0~2147483647。只有当防护动作类型为dynamic_block时,才需要传该参数。

lock_time

Integer

阻断时间,单位为秒,范围为0~65535。当“防护动作”选择“阻断”时,可设置阻断后恢复正常访问页面的时间。

domain_aggregation

Boolean

是否开启域名聚合统计。

region_aggregation

Boolean

是否开启全局计数。

description

String

规则描述

表5 CcCondition

参数

是否必选

参数类型

描述

category

String

字段类型

枚举值:

  • url

  • ip

  • ipv6

  • params

  • cookie

  • header

  • response_code

logic_operation

String

条件列表匹配逻辑。

  • 如果字段类型category是url, 匹配逻辑可以为:contain、 not_contain、 equal、 not_equal、 prefix、 not_prefix、 suffix、 not_suffix、 contain_any、 not_contain_all、 equal_any、 not_equal_all、 equal_any、 not_equal_all、 prefix_any、 not_prefix_all、 suffix_any、 not_suffix_all、 len_greater、 len_less、len_equal或者len_not_equal

  • 如果字段类型category是ip或者ipv6,匹配逻辑可以为: equal、not_equal、equal_any或者not_equal_all

  • 如果字段类型category是response_code,匹配逻辑可以为: equal或者not_equal

  • 如果字段类型category是params、cookie或者header, 匹配逻辑可以为:contain、 not_contain、 equal、 not_equal、 prefix、 not_prefix、 suffix、 not_suffix、 contain_any、 not_contain_all、 equal_any、not_equal_all、 equal_any、 not_equal_all、 prefix_any、 not_prefix_all、 suffix_any、 not_suffix_all、 len_greater、 len_less、len_equal、len_not_equal、、num_greater、num_less、num_equal、num_not_equal、exist或者not_exist

contents

Array of strings

条件列表逻辑匹配内容。当logic_operation参数不以any或者all结尾时,需要传该参数。

value_list_id

String

引用表id。当logic_operation参数以any或者all结尾时,需要传该参数。此外,引用表类型要与category类型保持一致。

index

String

子字段,当字段类型(category)选择“params”、“cookie”、“header”时,请根据实际需求配置子字段且该参数必填。

表6 action

参数

是否必选

参数类型

描述

category

String

动作类型:

  • captcha:人机验证,阻断后用户需要输入正确的验证码,恢复正确的访问页面。 -block:阻断。

  • log: 仅记录

  • dynamic_block: 上一个限速周期内,请求频率超过“限速频率”将被阻断,那么在下一个限速周期内,请求频率超过“放行频率”将被阻断。注:只有当cc防护规则模式为高级模式时才支持设置dynamic_block防护动作。

枚举值:

  • captcha

  • block

  • log

  • dynamic_block

detail

detail object

阻断页面信息。当防护动作(category)选择阻断(block)或者动态阻断(dynamic_block)时,需要设置返回的阻断页面。

  • 如果需要返回的阻断页面为系统默认的阻断页面,不需要传该参数。

  • 如果用户想防护自定义的阻断页面,可以通过此参数设置

表7 detail

参数

是否必选

参数类型

描述

response

response object

返回页面

表8 response

参数

是否必选

参数类型

描述

content_type

String

内容类型,值可为“application/json”、“text/html”、“text/xml”。

枚举值:

  • application/json

  • text/html

  • text/xml

content

String

防护页面内容

表9 tag_condition

参数

是否必选

参数类型

描述

category

String

用户标识字段,其值固定为referer

contents

Array of strings

用户标识字段内容

响应参数

状态码: 200

表10 响应Body参数

参数

参数类型

描述

name

String

规则名称

id

String

Rule ID.

policyid

String

Policy ID.

url

String

当mode值为0时,该参数有返回值。规则应用的URL链接,不包含域名。

prefix

Boolean

路径是否为前缀模式,当防护url以*结束,则为前缀模式。

mode

Integer

cc规则防护模式,对应console上的mode,现在只支持创建高级cc规则防护模式。

  • 0:标准,只支持对域名的防护路径做限制。

  • 1:高级,支持对路径、IP、Cookie、Header、Params字段做限制。

枚举值:

  • 0

  • 1

conditions

Array of CcCondition objects

cc规则防护规则限速条件,当cc防护规则为高级模式(mode参数值为1)时,该参数必填。

action

action object

请求次数限制到达后采取的防护动作

tag_type

String

限速模式:

  • ip:IP限速,根据IP区分单个Web访问者。

  • cookie:用户限速,根据Cookie键值区分单个Web访问者。

  • header:用户限速,根据Header区分单个Web访问者。

  • other:根据Referer(自定义请求访问的来源)字段区分单个Web访问者。

  • policy: 策略限速

  • domain: 域名限速

  • url: url限速

枚举值:

  • ip

  • cookie

  • header

  • other

  • policy

  • domain

  • url

tag_index

String

用户标识,当限速模式为用户限速(cookie或header)时,需要传该参数。

  • 选择cookie时,设置cookie字段名,即用户需要根据网站实际情况配置唯一可识别Web访问者的cookie中的某属性变量名。用户标识的cookie,不支持正则,必须完全匹配。例如:如果网站使用cookie中的某个字段name唯一标识用户,那么可以选取name字段来区分Web访问者。

  • 选择header时,设置需要防护的自定义HTTP首部,即用户需要根据网站实际情况配置可识别Web访问者的HTTP首部。

tag_condition

tag_condition object

用户标识,当限速模式为other时,需要传该参数。根据Referer(自定义请求访问的来源)字段区分单个Web访问者

limit_num

Integer

限制频率,单位为次,范围为1~2147483647

limit_period

Integer

限速周期,单位为秒,范围1~3600

unlock_num

Integer

放行频率,单位为次,范围为0~2147483647。只有当防护动作类型为dynamic_block时,才需要传该参数。

lock_time

Integer

阻断时间,单位为秒,范围为0~65535。当“防护动作”选择“阻断”时,可设置阻断后恢复正常访问页面的时间。

domain_aggregation

Boolean

是否开启域名聚合统计。

region_aggregation

Boolean

是否开启全局计数。

description

String

规则描述

total_num

Integer

该参数为预留参数,用于后续功能扩展,当前请用户忽略该参数

unaggregation

Boolean

该参数为预留参数,用于后续功能扩展,当前请用户忽略该参数

aging_time

Integer

规则老化时间,该参数为预留参数,用于后续功能扩展,当前请用户忽略该参数

producer

Integer

规则创建对象,该参数为预留参数,用于后续功能扩展,当前请用户忽略该参数

表11 CcCondition

参数

参数类型

描述

category

String

字段类型

枚举值:

  • url

  • ip

  • ipv6

  • params

  • cookie

  • header

  • response_code

logic_operation

String

条件列表匹配逻辑。

  • 如果字段类型category是url, 匹配逻辑可以为:contain、 not_contain、 equal、 not_equal、 prefix、 not_prefix、 suffix、 not_suffix、 contain_any、 not_contain_all、 equal_any、 not_equal_all、 equal_any、 not_equal_all、 prefix_any、 not_prefix_all、 suffix_any、 not_suffix_all、 len_greater、 len_less、len_equal或者len_not_equal

  • 如果字段类型category是ip或者ipv6,匹配逻辑可以为: equal、not_equal、equal_any或者not_equal_all

  • 如果字段类型category是response_code,匹配逻辑可以为: equal或者not_equal

  • 如果字段类型category是params、cookie或者header, 匹配逻辑可以为:contain、 not_contain、 equal、 not_equal、 prefix、 not_prefix、 suffix、 not_suffix、 contain_any、 not_contain_all、 equal_any、not_equal_all、 equal_any、 not_equal_all、 prefix_any、 not_prefix_all、 suffix_any、 not_suffix_all、 len_greater、 len_less、len_equal、len_not_equal、、num_greater、num_less、num_equal、num_not_equal、exist或者not_exist

contents

Array of strings

条件列表逻辑匹配内容。当logic_operation参数不以any或者all结尾时,需要传该参数。

value_list_id

String

引用表id。当logic_operation参数以any或者all结尾时,需要传该参数。此外,引用表类型要与category类型保持一致。

index

String

子字段,当字段类型(category)选择“params”、“cookie”、“header”时,请根据实际需求配置子字段且该参数必填。

表12 action

参数

参数类型

描述

category

String

动作类型:

  • captcha:人机验证,阻断后用户需要输入正确的验证码,恢复正确的访问页面。 -block:阻断。

  • log: 仅记录

  • dynamic_block: 上一个限速周期内,请求频率超过“限速频率”将被阻断,那么在下一个限速周期内,请求频率超过“放行频率”将被阻断。注:只有当cc防护规则模式为高级模式时才支持设置dynamic_block防护动作。

枚举值:

  • captcha

  • block

  • log

  • dynamic_block

detail

detail object

阻断页面信息。当防护动作(category)选择阻断(block)或者动态阻断(dynamic_block)时,需要设置返回的阻断页面。

  • 如果需要返回的阻断页面为系统默认的阻断页面,不需要传该参数。

  • 如果用户想防护自定义的阻断页面,可以通过此参数设置

表13 detail

参数

参数类型

描述

response

response object

阻断页面

表14 response

参数

参数类型

描述

content_type

String

内容类型,值可为“application/json”、“text/html”、“text/xml”。

枚举值:

  • application/json

  • text/html

  • text/xml

content

String

阻断页面内容

表15 tag_condition

参数

参数类型

描述

category

String

用户标识字段,其值固定为referer

contents

Array of strings

用户标识字段内容

状态码: 400

表16 响应Body参数

参数

参数类型

描述

error_code

String

错误码

error_msg

String

错误信息

状态码: 401

表17 响应Body参数

参数

参数类型

描述

error_code

String

错误码

error_msg

String

错误信息

状态码: 500

表18 响应Body参数

参数

参数类型

描述

error_code

String

错误码

error_msg

String

错误信息

请求示例

修改项目id为project_id,防护策略id为policy_id,规则id为rule_id的cc规则,修改限速模式为ip限速,限速频率为10次,限速周期为60秒,请求次数限制到达后采取的防护动作为人机验证,cc规则防护模式为高级,规则的名称为test55,不开启域名聚合统计,cc规则防护规则限速条件是URL包含“/url”,没有子字段,不开启全局计数。

PUT https://{Endpoint}/v1/{project_id}/waf/policy/{policy_id}/cc/{rule_id}?

{
  "description" : "",
  "tag_type" : "ip",
  "limit_num" : 10,
  "limit_period" : 60,
  "action" : {
    "category" : "captcha"
  },
  "mode" : 1,
  "name" : "test55",
  "domain_aggregation" : false,
  "conditions" : [ {
    "category" : "url",
    "logic_operation" : "contain",
    "contents" : [ "/url" ],
    "index" : null
  } ],
  "region_aggregation" : false
}

响应示例

状态码: 200

Request succeeded.

{
  "id" : "f88c5eabff9b4ff9ba6e7dd8e38128ba",
  "policyid" : "d471eef691684f1c8d7784532fd8f4bd",
  "name" : "test55",
  "description" : "",
  "mode" : 1,
  "conditions" : [ {
    "category" : "url",
    "contents" : [ "/url" ],
    "logic_operation" : "contain"
  } ],
  "action" : {
    "category" : "captcha"
  },
  "producer" : 1,
  "unaggregation" : false,
  "total_num" : 0,
  "limit_num" : 10,
  "limit_period" : 60,
  "lock_time" : 0,
  "tag_type" : "ip",
  "aging_time" : 0,
  "region_aggregation" : false,
  "domain_aggregation" : false
}

SDK代码示例

SDK代码示例如下。

修改项目id为project_id,防护策略id为policy_id,规则id为rule_id的cc规则,修改限速模式为ip限速,限速频率为10次,限速周期为60秒,请求次数限制到达后采取的防护动作为人机验证,cc规则防护模式为高级,规则的名称为test55,不开启域名聚合统计,cc规则防护规则限速条件是URL包含“/url”,没有子字段,不开启全局计数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package com.huaweicloud.sdk.test;

import com.huaweicloud.sdk.core.auth.ICredential;
import com.huaweicloud.sdk.core.auth.BasicCredentials;
import com.huaweicloud.sdk.core.exception.ConnectionException;
import com.huaweicloud.sdk.core.exception.RequestTimeoutException;
import com.huaweicloud.sdk.core.exception.ServiceResponseException;
import com.huaweicloud.sdk.waf.v1.region.WafRegion;
import com.huaweicloud.sdk.waf.v1.*;
import com.huaweicloud.sdk.waf.v1.model.*;

import java.util.List;
import java.util.ArrayList;

public class UpdateCcRuleSolution {

    public static void main(String[] args) {
        // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
        // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
        String ak = System.getenv("CLOUD_SDK_AK");
        String sk = System.getenv("CLOUD_SDK_SK");

        ICredential auth = new BasicCredentials()
                .withAk(ak)
                .withSk(sk);

        WafClient client = WafClient.newBuilder()
                .withCredential(auth)
                .withRegion(WafRegion.valueOf("<YOUR REGION>"))
                .build();
        UpdateCcRuleRequest request = new UpdateCcRuleRequest();
        request.withEnterpriseProjectId("<enterprise_project_id>");
        UpdateCcRuleRequestBody body = new UpdateCcRuleRequestBody();
        CreateCcRuleRequestBodyAction actionbody = new CreateCcRuleRequestBodyAction();
        actionbody.withCategory(CreateCcRuleRequestBodyAction.CategoryEnum.fromValue("captcha"));
        List<String> listConditionsContents = new ArrayList<>();
        listConditionsContents.add("/url");
        List<CcCondition> listbodyConditions = new ArrayList<>();
        listbodyConditions.add(
            new CcCondition()
                .withCategory(CcCondition.CategoryEnum.fromValue("url"))
                .withLogicOperation("contain")
                .withContents(listConditionsContents)
        );
        body.withDescription("");
        body.withRegionAggregation(false);
        body.withDomainAggregation(false);
        body.withLimitPeriod(60);
        body.withLimitNum(10);
        body.withTagType(UpdateCcRuleRequestBody.TagTypeEnum.fromValue("ip"));
        body.withAction(actionbody);
        body.withConditions(listbodyConditions);
        body.withMode(1);
        body.withName("test55");
        request.withBody(body);
        try {
            UpdateCcRuleResponse response = client.updateCcRule(request);
            System.out.println(response.toString());
        } catch (ConnectionException e) {
            e.printStackTrace();
        } catch (RequestTimeoutException e) {
            e.printStackTrace();
        } catch (ServiceResponseException e) {
            e.printStackTrace();
            System.out.println(e.getHttpStatusCode());
            System.out.println(e.getRequestId());
            System.out.println(e.getErrorCode());
            System.out.println(e.getErrorMsg());
        }
    }
}

修改项目id为project_id,防护策略id为policy_id,规则id为rule_id的cc规则,修改限速模式为ip限速,限速频率为10次,限速周期为60秒,请求次数限制到达后采取的防护动作为人机验证,cc规则防护模式为高级,规则的名称为test55,不开启域名聚合统计,cc规则防护规则限速条件是URL包含“/url”,没有子字段,不开启全局计数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# coding: utf-8

from huaweicloudsdkcore.auth.credentials import BasicCredentials
from huaweicloudsdkwaf.v1.region.waf_region import WafRegion
from huaweicloudsdkcore.exceptions import exceptions
from huaweicloudsdkwaf.v1 import *

if __name__ == "__main__":
    # The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    # In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak = __import__('os').getenv("CLOUD_SDK_AK")
    sk = __import__('os').getenv("CLOUD_SDK_SK")

    credentials = BasicCredentials(ak, sk) \

    client = WafClient.new_builder() \
        .with_credentials(credentials) \
        .with_region(WafRegion.value_of("<YOUR REGION>")) \
        .build()

    try:
        request = UpdateCcRuleRequest()
        request.enterprise_project_id = "<enterprise_project_id>"
        actionbody = CreateCcRuleRequestBodyAction(
            category="captcha"
        )
        listContentsConditions = [
            "/url"
        ]
        listConditionsbody = [
            CcCondition(
                category="url",
                logic_operation="contain",
                contents=listContentsConditions
            )
        ]
        request.body = UpdateCcRuleRequestBody(
            description="",
            region_aggregation=False,
            domain_aggregation=False,
            limit_period=60,
            limit_num=10,
            tag_type="ip",
            action=actionbody,
            conditions=listConditionsbody,
            mode=1,
            name="test55"
        )
        response = client.update_cc_rule(request)
        print(response)
    except exceptions.ClientRequestException as e:
        print(e.status_code)
        print(e.request_id)
        print(e.error_code)
        print(e.error_msg)

修改项目id为project_id,防护策略id为policy_id,规则id为rule_id的cc规则,修改限速模式为ip限速,限速频率为10次,限速周期为60秒,请求次数限制到达后采取的防护动作为人机验证,cc规则防护模式为高级,规则的名称为test55,不开启域名聚合统计,cc规则防护规则限速条件是URL包含“/url”,没有子字段,不开启全局计数。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
package main

import (
	"fmt"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/core/auth/basic"
    waf "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1"
	"github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1/model"
    region "github.com/huaweicloud/huaweicloud-sdk-go-v3/services/waf/v1/region"
)

func main() {
    // The AK and SK used for authentication are hard-coded or stored in plaintext, which has great security risks. It is recommended that the AK and SK be stored in ciphertext in configuration files or environment variables and decrypted during use to ensure security.
    // In this example, AK and SK are stored in environment variables for authentication. Before running this example, set environment variables CLOUD_SDK_AK and CLOUD_SDK_SK in the local environment
    ak := os.Getenv("CLOUD_SDK_AK")
    sk := os.Getenv("CLOUD_SDK_SK")

    auth := basic.NewCredentialsBuilder().
        WithAk(ak).
        WithSk(sk).
        Build()

    client := waf.NewWafClient(
        waf.WafClientBuilder().
            WithRegion(region.ValueOf("<YOUR REGION>")).
            WithCredential(auth).
            Build())

    request := &model.UpdateCcRuleRequest{}
	enterpriseProjectIdRequest:= "<enterprise_project_id>"
	request.EnterpriseProjectId = &enterpriseProjectIdRequest
	actionbody := &model.CreateCcRuleRequestBodyAction{
		Category: model.GetCreateCcRuleRequestBodyActionCategoryEnum().CAPTCHA,
	}
	var listContentsConditions = []string{
        "/url",
    }
	var listConditionsbody = []model.CcCondition{
        {
            Category: model.GetCcConditionCategoryEnum().URL,
            LogicOperation: "contain",
            Contents: &listContentsConditions,
        },
    }
	descriptionUpdateCcRuleRequestBody:= ""
	regionAggregationUpdateCcRuleRequestBody:= false
	domainAggregationUpdateCcRuleRequestBody:= false
	nameUpdateCcRuleRequestBody:= "test55"
	request.Body = &model.UpdateCcRuleRequestBody{
		Description: &descriptionUpdateCcRuleRequestBody,
		RegionAggregation: &regionAggregationUpdateCcRuleRequestBody,
		DomainAggregation: &domainAggregationUpdateCcRuleRequestBody,
		LimitPeriod: int32(60),
		LimitNum: int32(10),
		TagType: model.GetUpdateCcRuleRequestBodyTagTypeEnum().IP,
		Action: actionbody,
		Conditions: listConditionsbody,
		Mode: int32(1),
		Name: &nameUpdateCcRuleRequestBody,
	}
	response, err := client.UpdateCcRule(request)
	if err == nil {
        fmt.Printf("%+v\n", response)
    } else {
        fmt.Println(err)
    }
}

更多编程语言的SDK代码示例,请参见API Explorer的代码示例页签,可生成自动对应的SDK代码示例。

状态码

状态码

描述

200

Request succeeded.

400

Request failed.

401

The token does not have required permissions.

500

Internal server error.

错误码

请参见错误码

分享:

    相关文档

    相关产品