/** * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0. */ #pragma once #include #include #include namespace Aws { namespace Utils { namespace Json { class JsonValue; class JsonView; } // namespace Json } // namespace Utils namespace WAFV2 { namespace Model { /** *

Specifies that WAF should run a Challenge check against the * request to verify that the request is coming from a legitimate client session: *

  • If the request includes a valid, unexpired challenge token, * WAF applies any custom request handling and labels that you've configured and * then allows the web request inspection to proceed to the next rule, similar to a * CountAction.

  • If the request doesn't include a * valid, unexpired challenge token, WAF discontinues the web ACL evaluation of the * request and blocks it from going to its intended destination.

    WAF then * generates a challenge response that it sends back to the client, which includes * the following:

    • The header x-amzn-waf-action with * a value of challenge.

    • The HTTP status code * 202 Request Accepted.

    • If the request contains an * Accept header with a value of text/html, the response * includes a JavaScript page interstitial with a challenge script.

    • *

    Challenges run silent browser interrogations in the background, and * don't generally affect the end user experience.

    A challenge enforces * token acquisition using an interstitial JavaScript challenge that inspects the * client session for legitimate behavior. The challenge blocks bots or at least * increases the cost of operating sophisticated bots.

    After the client * session successfully responds to the challenge, it receives a new token from * WAF, which the challenge script uses to resubmit the original request.

    *

You can configure the expiration time in the * ChallengeConfig ImmunityTimeProperty setting at the * rule and web ACL level. The rule setting overrides the web ACL setting.

*

This action option is available for rules. It isn't available for web ACL * default actions.

See Also:

AWS * API Reference

*/ class ChallengeAction { public: AWS_WAFV2_API ChallengeAction(); AWS_WAFV2_API ChallengeAction(Aws::Utils::Json::JsonView jsonValue); AWS_WAFV2_API ChallengeAction& operator=(Aws::Utils::Json::JsonView jsonValue); AWS_WAFV2_API Aws::Utils::Json::JsonValue Jsonize() const; /** *

Defines custom handling for the web request, used when the challenge * inspection determines that the request's token is valid and unexpired.

*

For information about customizing web requests and responses, see Customizing * web requests and responses in WAF in the WAF Developer Guide.

*/ inline const CustomRequestHandling& GetCustomRequestHandling() const{ return m_customRequestHandling; } /** *

Defines custom handling for the web request, used when the challenge * inspection determines that the request's token is valid and unexpired.

*

For information about customizing web requests and responses, see Customizing * web requests and responses in WAF in the WAF Developer Guide.

*/ inline bool CustomRequestHandlingHasBeenSet() const { return m_customRequestHandlingHasBeenSet; } /** *

Defines custom handling for the web request, used when the challenge * inspection determines that the request's token is valid and unexpired.

*

For information about customizing web requests and responses, see Customizing * web requests and responses in WAF in the WAF Developer Guide.

*/ inline void SetCustomRequestHandling(const CustomRequestHandling& value) { m_customRequestHandlingHasBeenSet = true; m_customRequestHandling = value; } /** *

Defines custom handling for the web request, used when the challenge * inspection determines that the request's token is valid and unexpired.

*

For information about customizing web requests and responses, see Customizing * web requests and responses in WAF in the WAF Developer Guide.

*/ inline void SetCustomRequestHandling(CustomRequestHandling&& value) { m_customRequestHandlingHasBeenSet = true; m_customRequestHandling = std::move(value); } /** *

Defines custom handling for the web request, used when the challenge * inspection determines that the request's token is valid and unexpired.

*

For information about customizing web requests and responses, see Customizing * web requests and responses in WAF in the WAF Developer Guide.

*/ inline ChallengeAction& WithCustomRequestHandling(const CustomRequestHandling& value) { SetCustomRequestHandling(value); return *this;} /** *

Defines custom handling for the web request, used when the challenge * inspection determines that the request's token is valid and unexpired.

*

For information about customizing web requests and responses, see Customizing * web requests and responses in WAF in the WAF Developer Guide.

*/ inline ChallengeAction& WithCustomRequestHandling(CustomRequestHandling&& value) { SetCustomRequestHandling(std::move(value)); return *this;} private: CustomRequestHandling m_customRequestHandling; bool m_customRequestHandlingHasBeenSet = false; }; } // namespace Model } // namespace WAFV2 } // namespace Aws