← Cloudflare Ruleset Engine / ruleset-engine / rules-language / expressions
Úprava výrazů v dashboardu
V dashboardu Cloudflare existují dvě možnosti úpravy výrazy:
- Expression Builder: Umožňuje vytvářet výrazy pomocí rozbalovacích seznamů, s důrazem na vizuální způsob definování výrazu.
- Expression Editor: Čistě textové rozhraní, které podporuje pokročilé funkce, jako je seskupování pomocí symbolů a funkcí pro transformaci a ověřování hodnot.
Obecně můžete mezi Expression Builderem a Expression Editorem libovolně přepínat. Expression Builder ale nepodporuje pokročilé funkce, jako jsou:
Builder také nemusí zobrazit všechna pole, která můžete použít ve výrazu, který upravujete.
Pokud v editoru použijete pokročilé funkce výrazů nebo do výrazu zadáte pole, která nejsou v seznamu, nemusí být možné přepnout do Expression Builderu. Zobrazí se varovné okno s upozorněním, že daný výraz Builder nepodporuje. Můžete pak buď zahodit změny provedené v editoru, nebo přepnutí zrušit a pokračovat v práci v editoru.
Expression Builder
Expression Builder umožňuje vizuálně vytvářet výrazy pravidel pomocí rozbalovacích seznamů a zadávání hodnot polí, čímž definujete jeden nebo více dílčích výrazů.
Expression Preview zobrazí výraz v textové podobě:
(ip.src.country ne "GB")Expression Builder bude automaticky escapovat zpětné lomítko (\) a dvojitá uvozovka (") speciální znaky v řetězcových literálech při použití syntaxe uvozených řetězců.
Expression Editor
Expression Editor je čistě textové rozhraní pro definování výrazů pravidel, které podporuje celou specifikaci Cloudflare Rules language, včetně závorek jako seskupovacích symbolů.
Chcete-li otevřít Expression Editor, vyberte Edit expression vedle Expression Preview:
Chcete-li se přepnout zpět z Expression Editor do Expression Builder, vyberte Použijte nástroj pro tvorbu výrazů.
Escapování speciálních znaků
Ve výrazech používajících syntaxe uvozených řetězců, všechna zpětná lomítka (\) a dvojitá uvozovka (") znaky v řetězcových literálech musí být escapovány. Vizuální nástroj Expression Builder tyto speciální znaky automaticky escapuje přidáním zpětného lomítka na začátek, takže \ a " se stanou \\ a \", v uvedeném pořadí.
# Example of an expression with a " character written using quoted string syntax
http.request.uri.path eq "/foo\"bar"Expression Builder podporuje jak syntaxe uvozených řetězců a syntaxe surových řetězců. V syntaxi surového řetězce neexistují žádné speciální znaky ani escapovací sekvence, takže všechny znaky až po koncový oddělovač se interpretují tak, jak jsou zapsané.
# Example of an expression with a " character written using the raw string syntax
http.request.uri.path eq r#"/foo"bar"#Když vyberete Odpovídá regexu v Operátor rozevírací nabídce v dashboardu se v náhledu výrazu automaticky použije syntaxe raw string. V ostatních situacích možná budete muset přejít na Expression Editor a řetězec zadat manuálně pomocí syntaxe raw string. V takovém případě si přechodem zpět na Expression Builder zachováte syntaxi, kterou jste použili v editoru.
Když napíšete regulární výraz pomocí syntaxe řetězce v uvozovkách budete možná muset provést další escapování: viz Syntaxe řetězce v uvozovkách s podrobnostmi.
Pro psaní složitých regulárních výrazů Cloudflare doporučuje použít syntaxe surových řetězců, což vyžaduje méně escapování.
Vytvářejte vnořené výrazy
Expression Editor podporuje závorky jako seskupovací symboly. Pomocí závorek můžete explicitně seskupovat a vnořovat výrazy, a vytvářet tak velmi cíleně zaměřené výrazy.
Následující výraz pravidla odpovídá požadavkům od libovolného návštěvníka, který není z Malajsie a pokouší se přistupovat k cestám URI WordPressu.
((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"Vnořené výrazy, jako je ten výše, podporuje pouze Expression Editor. Pokud v Expression Editoru vytvoříte pravidlo s vnořenými výrazy a pokusíte se přepnout do Expression Builderu, dialogové okno vás upozorní, že tento výraz builder nepodporuje. Budete vyzváni k Discard changes a přepnout do Expression Builder nebo Zrušit a pokračovat v práci v editoru.
Validace výrazu
Cloudflare před uložením všechny výrazy ověří. Pokud váš výraz obsahuje chyby, zobrazí se vám v Cloudflare dashboardu chybová zpráva podobná této:
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