/*
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License").
* You may not use this file except in compliance with the License.
* A copy of the License is located at
*
* http://aws.amazon.com/apache2.0
*
* or in the "license" file accompanying this file. This file is distributed
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing
* permissions and limitations under the License.
*/
/*
* Do not modify this file. This file is generated from the wafv2-2019-07-29.normal.json service model.
*/
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.Text;
using System.IO;
using System.Net;
using Amazon.Runtime;
using Amazon.Runtime.Internal;
namespace Amazon.WAFV2.Model
{
///
/// A rule statement that defines a string match search for WAF to apply to web requests.
/// The byte match statement provides the bytes to search for, the location in requests
/// that you want WAF to search, and other settings. The bytes to search for are typically
/// a string that corresponds with ASCII characters. In the WAF console and the developer
/// guide, this is called a string match statement.
///
public partial class ByteMatchStatement
{
private FieldToMatch _fieldToMatch;
private PositionalConstraint _positionalConstraint;
private MemoryStream _searchString;
private List _textTransformations = new List();
///
/// Gets and sets the property FieldToMatch.
///
/// The part of the web request that you want WAF to inspect.
///
///
[AWSProperty(Required=true)]
public FieldToMatch FieldToMatch
{
get { return this._fieldToMatch; }
set { this._fieldToMatch = value; }
}
// Check to see if FieldToMatch property is set
internal bool IsSetFieldToMatch()
{
return this._fieldToMatch != null;
}
///
/// Gets and sets the property PositionalConstraint.
///
/// The area within the portion of the web request that you want WAF to search for SearchString
.
/// Valid values include the following:
///
///
///
/// CONTAINS
///
///
///
/// The specified part of the web request must include the value of SearchString
,
/// but the location doesn't matter.
///
///
///
/// CONTAINS_WORD
///
///
///
/// The specified part of the web request must include the value of SearchString
,
/// and SearchString
must contain only alphanumeric characters or underscore
/// (A-Z, a-z, 0-9, or _). In addition, SearchString
must be a word, which
/// means that both of the following are true:
///
/// -
///
///
SearchString
is at the beginning of the specified part of the web request
/// or is preceded by a character other than an alphanumeric character or underscore (_).
/// Examples include the value of a header and ;BadBot
.
///
/// -
///
///
SearchString
is at the end of the specified part of the web request
/// or is followed by a character other than an alphanumeric character or underscore (_),
/// for example, BadBot;
and -BadBot;
.
///
///
///
/// EXACTLY
///
///
///
/// The value of the specified part of the web request must exactly match the value of
/// SearchString
.
///
///
///
/// STARTS_WITH
///
///
///
/// The value of SearchString
must appear at the beginning of the specified
/// part of the web request.
///
///
///
/// ENDS_WITH
///
///
///
/// The value of SearchString
must appear at the end of the specified part
/// of the web request.
///
///
[AWSProperty(Required=true)]
public PositionalConstraint PositionalConstraint
{
get { return this._positionalConstraint; }
set { this._positionalConstraint = value; }
}
// Check to see if PositionalConstraint property is set
internal bool IsSetPositionalConstraint()
{
return this._positionalConstraint != null;
}
///
/// Gets and sets the property SearchString.
///
/// A string value that you want WAF to search for. WAF searches only in the part of web
/// requests that you designate for inspection in FieldToMatch. The maximum length
/// of the value is 200 bytes.
///
///
///
/// Valid values depend on the component that you specify for inspection in FieldToMatch
:
///
/// -
///
///
Method
: The HTTP method that you want WAF to search for. This indicates
/// the type of operation specified in the request.
///
/// -
///
///
UriPath
: The value that you want WAF to search for in the URI path,
/// for example, /images/daily-ad.jpg
.
///
/// -
///
///
HeaderOrder
: The comma-separated list of header names to match for.
/// WAF creates a string that contains the ordered list of header names, from the headers
/// in the web request, and then matches against that string.
///
///
///
/// If SearchString
includes alphabetic characters A-Z and a-z, note that
/// the value is case sensitive.
///
///
///
/// If you're using the WAF API
///
///
///
/// Specify a base64-encoded version of the value. The maximum length of the value before
/// you base64-encode it is 200 bytes.
///
///
///
/// For example, suppose the value of Type
is HEADER
and the
/// value of Data
is User-Agent
. If you want to search the User-Agent
/// header for the value BadBot
, you base64-encode BadBot
using
/// MIME base64-encoding and include the resulting value, QmFkQm90
, in the
/// value of SearchString
.
///
///
///
/// If you're using the CLI or one of the Amazon Web Services SDKs
///
///
///
/// The value that you want WAF to search for. The SDK automatically base64 encodes the
/// value.
///
///
[AWSProperty(Required=true)]
public MemoryStream SearchString
{
get { return this._searchString; }
set { this._searchString = value; }
}
// Check to see if SearchString property is set
internal bool IsSetSearchString()
{
return this._searchString != null;
}
///
/// Gets and sets the property TextTransformations.
///
/// Text transformations eliminate some of the unusual formatting that attackers use in
/// web requests in an effort to bypass detection. Text transformations are used in rule
/// match statements, to transform the FieldToMatch
request component before
/// inspecting it, and they're used in rate-based rule statements, to transform request
/// components before using them as custom aggregation keys. If you specify one or more
/// transformations to apply, WAF performs all transformations on the specified content,
/// starting from the lowest priority setting, and then uses the component contents.
///
///
[AWSProperty(Required=true, Min=1)]
public List TextTransformations
{
get { return this._textTransformations; }
set { this._textTransformations = value; }
}
// Check to see if TextTransformations property is set
internal bool IsSetTextTransformations()
{
return this._textTransformations != null && this._textTransformations.Count > 0;
}
}
}