Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация

Что
Извлекает информацию из сообщения (например, путь URI, параметр запроса, заголовок, параметр формы, переменную, полезную нагрузку XML или полезную нагрузку JSON) и сравнивает это содержимое с предопределенными регулярными выражениями. Если какое-либо из указанных регулярных выражений имеет значение true, сообщение считается угрозой и отклоняется.
Видео
Посмотрите следующие видеоролики, чтобы узнать больше о политике защиты регулярных выражений.
Видео | Описание |
---|---|
Защита от атак с использованием SQL-инъекций (New Edge) | Защитите себя от атак с использованием SQL-инъекций с помощью политики защиты регулярных выражений в пользовательском интерфейсе New Edge. |
Защита от атак SQL-инъекций (Classic Edge) | Защитите себя от атак с использованием SQL-инъекций с помощью политики защиты регулярных выражений в классическом пользовательском интерфейсе Edge. |
Образцы
GitHub
Пример защиты регулярными выражениями на GitHub иллюстрирует, как перехватить потенциальные атаки SQL-инъекций, осуществляемые через параметр запроса. Кроме того, пример иллюстрирует хорошую практику установки общего статуса ошибки 400, чтобы хакеры не могли получить какую-либо полезную информацию из ответа.
JavaScript включает защиту от атак
<RegularExpressionProtection name="JsonPathRegExProtection"> <DisplayName>Regular Expression Protection 1</DisplayName> <Source>request</Source> <JSONPayload escapeSlashCharacter="true"> <JSONPath> <Expression>$</Expression> <Pattern><\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*> </Pattern> <Pattern>n\s*\\\\\s*slash</Pattern> <Pattern>n\s*\/\s*slash</Pattern> <Pattern>n\s*\\"\s*quotes</Pattern> <Pattern>n\s*\\b\s*space</Pattern> <Pattern>n\s*\\f\s*forwardfeed</Pattern> <Pattern>n\s*\\n\s*newline</Pattern> <Pattern>n\s*\\r\s*carria</Pattern> <Pattern>n\s*\\t\s*tab</Pattern> <Pattern>n\s*\\uFFFF\s*hex</Pattern> </JSONPath> </JSONPayload> </RegularExpressionProtection>
В приведенном выше примере показано, как использовать политику RegularExpressionProtection для оценки полезных данных JSON на предмет наличия атак JavaScript. В частности, содержимое, извлеченное с помощью <JSONPath>
/ <Expression>
сравнивается с регулярным выражением в <JSONPath>
/ <Pattern>
.
Если регулярное выражение в вашем <JSONPath>
/ <Pattern>
содержит зарезервированные для XML символы («, &, ', < или .), вы должны закодировать его в XML, прежде чем включать его в файл конфигурации XML политики. Например , в приведенном выше примере регулярное выражение <\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
было закодировано в формате XML как <\s*script\b[^>]*>[^<]+<\s*\/\s*script\s*>
Кроме того, если ваше регулярное выражение включает косую черту (/), вы должны экранировать ее, установив для атрибута <JSONPayload>
escapeSlashCharacter
значение true
.
Сопоставление без учета регистра
Это обычный вариант использования сопоставления без учета регистра. Вот пример того, как это можно сделать в регулярном выражении, используя конструкцию (?i)
. В этом примере, например, DELETE
, delete
и Delete
будут иметь значение true.
<Pattern>[\s]*(?i)((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b))</Pattern>
О политике защиты регулярных выражений
Apigee Edge позволяет настраивать регулярные выражения , которые можно оценивать по трафику API во время выполнения, чтобы выявлять распространенные угрозы на уровне контента, которые следуют определенным шаблонам.
Регулярное выражение , или сокращенно регулярное выражение , представляет собой набор строк, которые определяют шаблон в строке. Регулярные выражения позволяют программно оценивать содержимое на наличие шаблонов. Регулярные выражения можно использовать, например, для оценки адреса электронной почты и обеспечения его правильной структуры. Дополнительную информацию см. в разделе «Регулярные выражения» в учебниках по Java.
Чаще всего RegularExpressionProtection используется для оценки полезных данных JSON и XML на наличие вредоносного содержимого.
Никакое регулярное выражение не может устранить все атаки на основе контента, и для обеспечения глубокой защиты необходимо комбинировать несколько механизмов. В этом разделе описаны некоторые рекомендуемые шаблоны исключения контента.
Примеры шаблонов исключения
Регулярные выражения должны быть закодированы в XML-файле конфигурации политики.
Имя | Регулярное выражение |
---|---|
SQL-инъекция | [\s]*((delete)|(exec)|(drop\s*table)|(insert)|(shutdown)|(update)|(\bor\b)) |
Внедрение включения на стороне сервера | <!--#(include|exec|echo|config|printenv)\s+.* XML-кодирование: <!--#(include|exec|echo|config|printenv)\s+.* |
XPath Сокращенный синтаксический ввод | (/(@?[\w_?\w:\*]+(\[[^]]+\])*)?)+ |
Расширенное внедрение синтаксиса XPath | /?(ancestor(-or-self)?|descendant(-or-self)?|following(-sibling)) |
JavaScript-инъекция | <\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> XML-кодирование: <\s*script\b[^>]*>[^<]+<\s*/\s*script\s*> |
Внедрение исключений Java | .*?Exception in thread.* |
Установите заголовок Content-Type в запросе с полезной нагрузкой XML или JSON.
Полезная нагрузка политики защиты регулярных выражений может включать в себя следующие элементы:
- Элемент
<XMLPayload>
: указывает, что информацию необходимо извлечь из полезных данных XML и оценить по предоставленному регулярному выражению.Если вы используете
<XMLPayload>
в политике, заголовокContent-Type
запроса должен быть типом контента XML, напримерapplication/xml
илиtext/xml
. - Элемент
<JSONPayload>
: указывает, что информацию необходимо извлечь из полезных данных JSON и оценить по предоставленному регулярному выражению.Если вы используете
<JSONPayload>
в политике, заголовокContent-Type
запроса должен быть типом контента JSON, напримерapplication/json
.
Обычно вы разрабатываете API для приема XML или JSON. Однако возможен сценарий, в котором API принимает оба варианта. Затем вы можете определить политику защиты регулярных выражений, которая использует элементы <XMLPayload>
и <JSONPayload>
. Только один элемент будет применяться к конкретному запросу в зависимости от значения заголовка Content-Type
.
Ссылка на элемент
Ссылка на элемент описывает элементы и атрибуты политики RegularExpressionProtection.
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1"> <DisplayName>Regular Expression Protection 1</DisplayName> <Source>response</Source> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <URIPath> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </URIPath> <QueryParam name="a-query-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </QueryParam> <Header name="a-header"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Header> <FormParam name="a-form-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </FormParam> <Variable name="request.content"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Variable> <XMLPayload> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces> <XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath> </XMLPayload> <JSONPayload> <JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath> </JSONPayload> </RegularExpressionProtection>
Атрибуты <RegularExpressionProtection>
<RegularExpressionProtection async="false" continueOnError="false" enabled="true" name="Regular-Expression-Protection-1">
В следующей таблице описаны атрибуты, общие для всех родительских элементов политики:
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
name | Внутреннее имя политики. Значение атрибута При необходимости используйте элемент | Н/Д | Необходимый |
continueOnError | Установите значение Установите значение | ЛОЖЬ | Необязательный |
enabled | Установите значение Установите значение | истинный | Необязательный |
async | Этот атрибут устарел. | ЛОЖЬ | Устарело |
Элемент <DisplayName>
Используйте в дополнение к атрибуту name
, чтобы пометить политику в редакторе прокси-сервера пользовательского интерфейса управления другим именем на естественном языке.
<DisplayName>Policy Display Name</DisplayName>
По умолчанию | Н/Д Если вы опустите этот элемент, будет использовано значение атрибута |
---|---|
Присутствие | Необязательный |
Тип | Нить |
Элемент <Источник>
Указывает сообщение, из которого необходимо извлечь информацию.
Если элемент <Source>
опущен, по умолчанию используется значение message
. Например, <Source>message</Source>
. Если установлено значение message
, политика использует сообщение запроса в качестве источника при присоединении к потоку запросов. Аналогично, политика использует ответное сообщение, когда оно прикреплено к потоку ответов.
Если исходное сообщение не может быть разрешено или оно преобразуется в тип, не являющийся сообщением, политика возвращает ошибку.
<Source>response</Source>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Нить |
Элемент <IgnoreUnresolvedVariables>
Определяет, возвращает ли политика ошибку при обнаружении неразрешимой переменной.
Если установлено значение false
(по умолчанию), политика возвращает ошибку при обнаружении неразрешимой переменной. Если установлено значение true
, неразрешенная переменная рассматривается как пустая строка (Null).
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
По умолчанию: | ЛОЖЬ |
Присутствие: | Необязательный |
Тип: | логическое значение |
Элемент <URIPath>
Указывает, что информацию необходимо извлечь из пути URI запроса и оценить по предоставленным регулярным выражениям. Вы должны предоставить хотя бы один элемент <Pattern>
, определяющий соответствующий шаблон регулярного выражения.
<URIPath> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </URIPath>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Н/Д |
Элемент <QueryParam>
Указывает, что информацию необходимо извлечь из параметра запроса запроса и оценить по предоставленным регулярным выражениям. Вы должны предоставить хотя бы один элемент <Pattern>
, определяющий соответствующий шаблон регулярного выражения.
<QueryParam name="a-query-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </QueryParam>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Н/Д |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
имя | Имя параметра запроса запроса, из которого необходимо извлечь информацию для оценки по предоставленным регулярным выражениям. | Н/Д | Необходимый |
Элемент <Заголовок>
Указывает, что информацию необходимо извлечь из заголовков запроса и ответа и сравнить с предоставленными регулярными выражениями. Вы должны предоставить хотя бы один элемент <Pattern>
, определяющий соответствующий шаблон регулярного выражения.
<Header name="a-header"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Header>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Н/Д |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
имя | Имя заголовка запроса и ответа, из которого необходимо извлечь информацию для оценки по предоставленным регулярным выражениям. | Н/Д | Необходимый |
Элемент <ФормаПарам>
Указывает, что информацию необходимо извлечь из параметра формы запроса и оценить по предоставленным регулярным выражениям. Вы должны предоставить хотя бы один элемент <Pattern>
, определяющий соответствующий шаблон регулярного выражения.
<FormParam name="a-form-param"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </FormParam>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Н/Д |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
имя | Имя параметра формы запроса, из которого необходимо извлечь информацию для оценки по предоставленным регулярным выражениям. | Н/Д | Необходимый |
Элемент <Переменная>
Указывает, что информацию необходимо извлечь из заданной переменной и оценить по предоставленным регулярным выражениям.
<Variable name="request.content"> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </Variable>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Н/Д |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
имя | Имя переменной, из которой необходимо извлечь информацию для оценки по предоставленным регулярным выражениям. | Н/Д | Необходимый |
Элемент <XMLPayload>
Указывает, что информацию необходимо извлечь из полезных данных XML и сравнить с предоставленными регулярными выражениями.
<XMLPayload> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces> <XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath> </XMLPayload>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Н/Д |
Элемент <XMLPayload>/<Пространства имен>
Указывает пространства имен, которые будут использоваться при оценке XPath.
<XMLPayload> <Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces> <XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath> </XMLPayload>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Нить |
Элемент <XMLPayload>/<Пространства имен>/<Пространство имен>
Указывает каждое пространство имен, которое будет использоваться при оценке XPath.<Namespaces> <Namespace prefix="apigee">http://www.apigee.com</Namespace> </Namespaces>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Нить |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
префикс | Предоставляет префикс, помогающий определить данное пространство имен. | Н/Д | Необходимый |
Элемент <XMLPayload>/<XPath>
Указывает XPath для оценки.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Н/Д |
Элемент <XMLPayload>/<XPath>/<Expression>
Указывает выражение XPath, определенное для переменной. Поддерживаются только выражения XPath 1.0. Например,<Expression>/company/employee[@age>=$request.header.age]</Expression>
извлекает сведения о сотрудниках, возраст которых больше или равен значению, указанному в request.header.age
. <XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Нить |
Элемент <XMLPayload>/<XPath>/<Type>
Указывает тип данных.<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
По умолчанию: | нить |
Присутствие: | Необязательный |
Тип: | Нить |
Допустимые значения: | Нить. Допустимые значения включают |
Элемент <XMLPayload>/<XPath>/<Pattern>
Определяет шаблон регулярного выражения. Если регулярное выражение в элементе <Pattern>
содержит зарезервированные для XML символы («, &, ', < или .), перед включением его необходимо закодировать в XML.
<XPath> <Expression>/apigee:Greeting/apigee:User</Expression> <Type>string</Type> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </XPath>
По умолчанию: | Н/Д |
Присутствие: | Необходимый |
Тип: | Нить |
Элемент <JSONPayload>
Указывает, что информацию необходимо извлечь из полезных данных JSON и сравнить с предоставленными регулярными выражениями.
<JSONPayload> <JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath> </JSONPayload>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Н/Д |
Атрибуты
Атрибут | Описание | По умолчанию | Присутствие |
---|---|---|---|
escapeSlashПерсонаж | Установите значение | истинный | Необязательный |
Элемент <JSONPayload>/<JSONPath>/<Expression>
Указывает выражение JSONPath, определенное для переменной.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
По умолчанию: | Н/Д |
Присутствие: | Необязательный |
Тип: | Нить |
Элемент <JSONPayload>/<JSONPath>/<Pattern>
Определяет шаблон регулярного выражения. Если регулярное выражение в элементе <Pattern>
содержит зарезервированные для XML символы («, &, ', < или .), перед включением его необходимо закодировать в XML.
<JSONPath> <Expression>$.store.book[*].author</Expression> <Pattern>REGEX PATTERN</Pattern> <Pattern>REGEX PATTERN</Pattern> </JSONPath>
По умолчанию: | Н/Д |
Присутствие: | Необходимый |
Тип: | Нить |
Ссылка на ошибку
This section describes the error codes and messages returned and fault variables
set by Edge when this policy triggers an error. This information is important to know if
you are developing fault rules to handle faults. If you want to capture an error and raise your own
custom error, set the continueOnError="true"
attribute on the policy root element.
To learn more, see
What you need to know about policy errors and Handling
faults.
Errors returned from Edge policies follow a consistent format as described in the Error code reference.
Runtime errors
These errors can occur when the policy executes.
Error Code | Message |
---|---|
ExecutionFailed | Failed to execute the RegularExpressionProtection StepDefinition {0}. Reason: {1} |
InstantiationFailed | Failed to instantiate the RegularExpressionProtection StepDefinition {0} |
NonMessageVariable | Variable {0} does not resolve to a Message |
SourceMessageNotAvailable | {0} message is not available for RegularExpressionProtection StepDefinition {1} |
ThreatDetected | Regular Expression Threat Detected in {0}: regex: {1} input: {2} |
VariableResolutionFailed | Failed to resolve variable {0} |
Deployment errors
Error Code | Message | Fix |
---|---|---|
CannotBeConvertedToNodeset | RegularExpressionProtection {0}: Result of xpath {1} cannot be converted to nodeset. Context {2} | build |
DuplicatePrefix | RegularExpressionProtection {0}: Duplicate prefix {1} | build |
EmptyJSONPathExpression | RegularExpressionProtection {0}: Empty JSONPath expression | build |
EmptyXPathExpression | RegularExpressionProtection {0}: Empty XPath expression | build |
InvalidRegularExpression | RegularExpressionProtection {0}: Invalid Regular Expression {1}, Context {2} | build |
JSONPathCompilationFailed | RegularExpressionProtection {0}: Failed to compile jsonpath {1}. Context {2} | build |
NONEmptyPrefixMappedToEmptyURI | RegularExpressionProtection {0}: Non-empty prefix {1} cannot be mapped to empty uri | build |
NoPatternsToEnforce | RegularExpressionProtection {0}: No patterns to enforce in {1} | build |
NothingToEnforce | RegularExpressionProtection {0}: at least one of URIPath, QueryParam, Header, FormParam, XMLPayload, JSONPayload is mandatory | build |
XPathCompilationFailed | RegularExpressionProtection {0}: Failed to compile xpath {1}. Context {2} | build |
Fault variables
These variables are set when this policy triggers an error. For more information, see What you need to know about policy errors.
Variables | Where | Example |
---|---|---|
fault.name="fault_name" |
fault_name is the name of the fault, as listed in the table above. | fault.name Matches "ThreatDetected" |
regularexpressionprotection.policy_name.failed |
policy_name is the user-specified name of the policy that threw the fault. | regularexpressionprotection.Regular-Expressions-Protection-1.failed = true |