← Cloudflare Ruleset Engine / ruleset-engine / rules-language / expressions
Редактирование выражений в дашборде
В панели управления Cloudflare есть два способа изменить выражения:
- Expression Builder: Позволяет создавать выражения с помощью раскрывающихся списков, делая акцент на визуальном подходе к определению выражения.
- Expression Editor: Текстовый интерфейс, который поддерживает расширенные возможности, такие как группирующие символы и функции для преобразования и проверки значений.
В целом вы можете переключаться между Expression Builder и Expression Editor в любую сторону. Однако Expression Builder не поддерживает такие расширенные возможности, как:
Expression Builder может также показывать не все поля, которые можно использовать в редактируемом выражении.
Если вы используете расширенные возможности выражений или вводите в редакторе поля, которые не входят в список, переключиться на Expression Builder может не получиться. В этом случае появится всплывающее предупреждение о том, что выражение не поддерживается в конструкторе. Чтобы продолжить, вы можете отменить изменения, внесённые в редакторе, либо отказаться от переключения и продолжить работу в редакторе.
Expression Builder
Expression Builder позволяет визуально создавать выражения правил: вы выбираете значения из раскрывающихся списков и вводите значения полей, чтобы задать одно или несколько подвыражений.
Expression Preview отображает выражение в текстовом виде:
(ip.src.country ne "GB")Expression Builder будет автоматически экранировать обратной косой черты (\) и двойная кавычка (") специальные символы в строковых литералах при использовании синтаксис строк в кавычках.
Expression Editor
Expression Editor является текстовым интерфейсом для описания выражений правил, который полностью поддерживает спецификацию Cloudflare Язык правил, включая скобки в качестве символов группировки.
Чтобы открыть Expression Editor, выберите Edit expression рядом с Expression Preview:
Чтобы вернуться из Expression Editor в Expression Builder, выберите Используйте конструктор выражений.
Экранирование специальных символов
В выражениях, использующих синтаксис строк в кавычках, все символы обратной косой черты (\) и двойная кавычка (") в строковых литералах необходимо экранировать. Визуальный Expression Builder автоматически экранирует эти специальные символы, добавляя перед ними обратный слэш, так что \ и " становятся \\ и \", соответственно.
# Example of an expression with a " character written using quoted string syntax
http.request.uri.path eq "/foo\"bar"Expression Builder поддерживает как синтаксис строк в кавычках и синтаксис необработанных строк. В синтаксисе неформатированных строк нет специальных символов или escape-последовательностей, поэтому все символы до завершающего разделителя интерпретируются как есть.
# Example of an expression with a " character written using the raw string syntax
http.request.uri.path eq r#"/foo"bar"#Если вы выбираете Соответствует регулярному выражению в Оператор раскрывающемся списке на панели управления предварительный просмотр выражения будет автоматически использовать синтаксис необработанной строки. В остальных случаях может понадобиться переключиться на Expression Editor, чтобы вручную ввести строку в синтаксисе необработанной строки. В этом случае при возврате к Expression Builder синтаксис, использованный в редакторе, сохранится.
Когда вы пишете регулярное выражение при использовании синтаксиса строк в кавычках может потребоваться дополнительное экранирование, подробнее см. Синтаксис строк в кавычках для получения подробностей.
Для написания сложных регулярных выражений Cloudflare рекомендует использовать синтаксис необработанных строк, что требует меньшего экранирования.
Создание вложенных выражений
Expression Editor поддерживает скобки как символы группировки. Используйте скобки для явной группировки и вложения выражений, что, в свою очередь, позволяет создавать точно нацеленные выражения.
Следующее выражение правила соответствует запросам от любого посетителя не из Малайзии, который пытается обратиться к путям URI WordPress.
((http.request.uri.path contains "/xmlrpc.php") or (http.request.uri.path
contains "/wp-login.php") or (http.request.uri.path contains "/wp-admin/"
and not http.request.uri.path contains "/wp-admin/admin-ajax.php" and not
http.request.uri.path contains "/wp-admin/theme-editor.php")) and
ip.src.country ne "MY"Вложенные выражения, подобные приведённому выше, поддерживаются только в Expression Editor. Если вы создадите правило с вложенными выражениями в Expression Editor и попытаетесь переключиться на Expression Builder, появится диалоговое окно с предупреждением о том, что это выражение не поддерживается в конструкторе. Вам будет предложено Discard changes и переключитесь на Expression Builder или Отмена и продолжить работу в редакторе.
Проверка выражений
Cloudflare проверяет все выражения перед сохранением, поэтому при ошибке в выражении в панели управления Cloudflare появится сообщение об ошибке, похожее на приведённое ниже:
Filter parsing error (1:313): ((http.request.uri.path contains
"/xmlrpc.php") or (http.request.uri.path contains "/wp-login.php") or
(http.request.uri.path contains "/wp-admin/" and not
http.request.uri.path contains "/wp-admin/admin-ajax.php" and not
http.request.uri.path contains "/wp-admin/theme-editor.php")) and
ip.src.country ne "MY") ^ unrecognised input