index.js 124 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237
  1. import countries from 'i18n-iso-countries'
  2. import enLocale from 'i18n-iso-countries/langs/en.json'
  3. import { arrayToObj } from '@/utils/utils'
  4. import i18n from '@/locales'
  5. import { getRuleConfig } from '../utils'
  6. countries.registerLocale(enLocale)
  7. const names = countries.getNames('en')
  8. export const COUNTRYS = Object.entries(names)
  9. .map(([key, label]) => ({ key, label }))
  10. .sort((a, b) => a.label.localeCompare(b.label))
  11. export const IDS = [
  12. { key: 33554433, label: 'DoS Tool - TLS Signature' },
  13. { key: 33554434, label: 'Sneakerbot - TLS Signature' },
  14. { key: 33554436, label: 'Scraping bot - TLS Signature' },
  15. { key: 33554441, label: 'Golang - TLS Signature' },
  16. { key: 33554442, label: 'Java - TLS Signature' },
  17. { key: 33554443, label: 'Python - HTTP Signature' },
  18. { key: 33554444, label: 'Python - User-agent' },
  19. { key: 33554445, label: 'Browser imitator - Incorrect Browser Headers' },
  20. { key: 33554446, label: 'Browser imitator - Incorrect Browser Headers' },
  21. { key: 33554447, label: 'Sneakerbot - Request Headers' },
  22. { key: 33554448, label: 'cURL - TLS Signature' },
  23. { key: 33554450, label: 'Scraping bot - TLS Signature' },
  24. { key: 33554451, label: 'Python - User-agent' },
  25. { key: 33554452, label: 'Golang - User-agent' },
  26. { key: 33554453, label: 'Python - User-agent' },
  27. { key: 33554454, label: 'Node.js - User-agent' },
  28. { key: 33554455, label: 'Python - User-agent' },
  29. { key: 33554456, label: 'Python - User-agent' },
  30. { key: 33554457, label: 'Headless browser - User-agent' },
  31. { key: 33554458, label: 'Headless browser - User-agent' },
  32. { key: 33554459, label: 'SEO Tool User-agent - User-agent' },
  33. { key: 33554460, label: 'SEO Tool User-agent - User-agent' },
  34. { key: 33554461, label: 'SEO Tool User-agent - User-agent' },
  35. { key: 33554463, label: 'SEO Tool User-agent - User-agent' },
  36. { key: 33554464, label: 'AhrefsBot - User-agent' },
  37. { key: 33554465, label: 'SemrushBot - User-agent' },
  38. { key: 33554467, label: 'Java - User-agent' },
  39. { key: 33554468, label: 'Wget - User-agent' },
  40. { key: 33554469, label: 'cURL - User-agent' },
  41. { key: 33554470, label: 'Java - User-agent' },
  42. { key: 33554471, label: 'Python - TLS Signature' },
  43. { key: 33554472, label: 'Abnormal request - Request Headers' },
  44. { key: 33554473, label: 'Abnormal request - Incorrect Browser Headers' },
  45. { key: 33554474, label: 'Python - TLS Signature' },
  46. { key: 33554475, label: 'Sneakerbot - TLS Signature' },
  47. { key: 33554476, label: 'Python - TLS Signature' },
  48. { key: 33554477, label: 'Python - TLS Signature' },
  49. { key: 33554478, label: 'Python - TLS Signature' },
  50. { key: 33554479, label: 'Openssl client - TLS Signature ' },
  51. { key: 33554480, label: 'Python - TLS Signature' },
  52. { key: 33554481, label: 'Python - TLS Signature' },
  53. { key: 33554482, label: 'Python - TLS Signature' },
  54. { key: 33554484, label: 'Flexget - TLS Signature' },
  55. { key: 33554485, label: 'Python - TLS Signature' },
  56. { key: 33554486, label: 'Golang - TLS Signature' },
  57. { key: 33554487, label: 'Flexget - TLS Signature' },
  58. { key: 33554488, label: 'Sneakerbot - TLS Signature' },
  59. { key: 33554489, label: 'Python - TLS Signature' },
  60. { key: 33554492, label: 'Sneakerbot - TLS Signature' },
  61. { key: 33554493, label: 'Flexget - TLS Signature' },
  62. { key: 33554494, label: 'Node.js - TLS Signature' },
  63. { key: 33554495, label: 'Python - TLS Signature' },
  64. { key: 33554496, label: '.NET framework - TLS Signature' },
  65. { key: 33554497, label: 'Sneakerbot - TLS Signature' },
  66. { key: 33554498, label: 'Golang - TLS Signature' },
  67. { key: 33554499, label: 'Sneakerbot - TLS Signature' },
  68. { key: 33554500, label: 'Sneakerbot - TLS Signature' },
  69. { key: 33554501, label: 'Python - TLS Signature' },
  70. { key: 33554502, label: 'Windows bot - HTTP Fingerprint' },
  71. { key: 33554503, label: 'Sneakerbot - Request Headers' },
  72. { key: 33554505, label: 'Python - TLS Signature' },
  73. { key: 33554506, label: 'Golang - TLS Signature' },
  74. { key: 33554507, label: 'Golang - TLS Signature' },
  75. { key: 33554508, label: 'Java - TLS Signature' },
  76. { key: 33554509, label: 'Sneakerbot - TLS Signature' },
  77. { key: 33554510, label: 'Sneakerbot - TLS Signature' },
  78. { key: 33554511, label: 'Python - TLS Signature' },
  79. { key: 33554512, label: 'cURL - TLS Signature' },
  80. { key: 33554513, label: 'Openssl client - TLS Signature' },
  81. { key: 33554514, label: 'Flexget - TLS Signature' },
  82. { key: 33554515, label: 'Flexget - TLS Signature' },
  83. { key: 33554516, label: 'Scraping bot - TLS Signature' },
  84. { key: 33554517, label: 'Flexget - TLS Signature' },
  85. { key: 33554518, label: 'Sneakerbot - TLS Signature' },
  86. { key: 33554519, label: 'Sneakerbot - TLS Signature' },
  87. { key: 33554520, label: 'Python - TLS Signature ' },
  88. { key: 33554523, label: 'Flexget - TLS Signature' },
  89. { key: 33554524, label: 'Flexget - TLS Signature' },
  90. { key: 33554525, label: 'Sneakerbot - TLS Signature' },
  91. { key: 33554526, label: 'Node.js - TLS Signature' },
  92. { key: 33554527, label: 'Golang - TLS Signature' },
  93. { key: 33554528, label: 'Headless browser - User-agent' },
  94. { key: 33554529, label: 'Node.js - TLS Signature' },
  95. { key: 33554530, label: 'Scraping bot - TLS Signature ' },
  96. { key: 33554531, label: 'Sneakerbot - TLS Signature' },
  97. { key: 33554532, label: 'cURL - TLS Signature' },
  98. { key: 33554533, label: 'cURL - TLS Signature' },
  99. { key: 33554534, label: 'cURL - TLS Signature' },
  100. { key: 33554535, label: 'cURL - TLS Signature' },
  101. { key: 33554536, label: 'cURL - TLS Signature' },
  102. { key: 33554537, label: 'cURL - TLS Signature' },
  103. { key: 33554538, label: 'cURL - TLS Signature' },
  104. { key: 33554542, label: 'cURL - TLS Signature' },
  105. { key: 33554543, label: '.NET framework - TLS Signature ' },
  106. { key: 33554544, label: 'cURL - TLS Signature' },
  107. { key: 33554545, label: 'Java - TLS Signature' },
  108. { key: 33554546, label: 'Java - TLS Signature' },
  109. { key: 33554547, label: 'Java - TLS Signature' },
  110. { key: 33554548, label: 'Java - TLS Signature' },
  111. { key: 33554549, label: 'Windows bot - TLS Signature' },
  112. { key: 33554550, label: 'Abnormal request - Incorrect Browser Headers' },
  113. { key: 33554551, label: 'Sneakerbot - TLS Signature' },
  114. { key: 33554552, label: 'Bad User-agent - User-agent' },
  115. { key: 33554553, label: 'Flexget - TLS Signature' },
  116. { key: 33554554, label: 'Python - TLS Signature' },
  117. { key: 33554555, label: 'Node.js - TLS Signature' },
  118. { key: 33554556, label: 'Sneakerbot - TLS Signature' },
  119. { key: 33554557, label: 'Flexget - TLS Signature' },
  120. { key: 33554558, label: 'Flexget - TLS Signature' },
  121. { key: 33554561, label: '.NET framework - TLS Signature' },
  122. { key: 33554562, label: 'Python - TLS Signature' },
  123. { key: 33554563, label: 'cURL - TLS Signature' },
  124. { key: 33554564, label: 'Sneakerbot - TLS Signature' },
  125. { key: 33554565, label: 'Sneakerbot - TLS Signature' },
  126. { key: 33554566, label: 'Golang - TLS Signature' },
  127. { key: 33554567, label: 'Sneakerbot - TLS Signature' },
  128. { key: 33554568, label: 'cURL - TLS Signature' },
  129. { key: 33554569, label: '.NET framework - TLS Signature' },
  130. { key: 33554570, label: 'Python - TLS Signature' },
  131. { key: 33554571, label: 'cURL - HTTP Signature' },
  132. { key: 33554572, label: 'Sneakerbot - TLS Signature' },
  133. { key: 33554574, label: 'cURL - TLS Signature' },
  134. { key: 33554575, label: 'cURL - TLS Signature' },
  135. { key: 33554576, label: 'cURL - TLS Signature' },
  136. { key: 33554577, label: 'Python - HTTP Signature' },
  137. { key: 33554578, label: 'Node.js - HTTP Signature' },
  138. { key: 33554579, label: 'Java - TLS Signature' },
  139. { key: 33554580, label: 'Node.js - TLS Signature' },
  140. { key: 33554582, label: 'Python - TLS Signature' },
  141. { key: 33554583, label: 'Unclassified bot - Request Headers' },
  142. { key: 33554584, label: 'SEO Tool User-agent - User-agent' },
  143. { key: 33554585, label: 'Unclassified bot - Request Headers' },
  144. { key: 33554586, label: 'Unclassified bot - Request Headers' },
  145. { key: 33554587, label: 'Unclassified bot - Request Headers' },
  146. { key: 33554588, label: 'Java - TLS Signature' },
  147. { key: 33554589, label: 'proxy - TLS Signature' },
  148. { key: 33554590, label: 'Java - TLS Signature' },
  149. { key: 33554591, label: 'Java - TLS Signature' },
  150. { key: 33554595, label: 'Node.js - TLS Signature' },
  151. { key: 33554596, label: 'Lua - TLS Signature' },
  152. { key: 33554597, label: 'Python - TLS Signature' },
  153. { key: 33554598, label: 'php - TLS Signature' },
  154. { key: 33554599, label: 'Perl - TLS Signature' },
  155. { key: 33554600, label: 'Wget - TLS Signature' },
  156. { key: 33554602, label: 'Python - TLS Signature' },
  157. { key: 33554603, label: 'Python - TLS Signature' },
  158. { key: 33554604, label: '.NET framework - TLS Signature' },
  159. { key: 33554605, label: 'cURL - TLS Signature' },
  160. { key: 33554606, label: 'Node.js - User-agent' },
  161. { key: 33554607, label: 'Sneakerbot - TLS Signature' },
  162. { key: 33554608, label: 'Flexget - TLS Signature' },
  163. { key: 33554609, label: 'Flexget - TLS Signature' },
  164. { key: 33554610, label: 'Windows bot - TLS Signature ' },
  165. { key: 33554612, label: 'Python - TLS Signature' },
  166. { key: 33554613, label: 'Flexget - TLS Signature' },
  167. { key: 33554614, label: 'Python - TLS Signature' },
  168. { key: 33554615, label: 'Python - TLS Signature' },
  169. { key: 33554616, label: 'Python - TLS Signature' },
  170. { key: 33554617, label: 'Python - TLS Signature' },
  171. { key: 33554621, label: 'Python - TLS Signature' },
  172. { key: 33554622, label: 'Wget - TLS Signature' },
  173. { key: 33554623, label: 'Python - TLS Signature' },
  174. { key: 33554624, label: 'Sneakerbot - TLS Signature' },
  175. { key: 33554625, label: 'Python - TLS Signature' },
  176. { key: 33554626, label: 'Python - TLS Signature' },
  177. { key: 33554627, label: 'Python - TLS Signature' },
  178. { key: 33554628, label: 'Node.js - TLS Signature' },
  179. { key: 33554629, label: 'Node.js - TLS Signature' },
  180. { key: 33554630, label: 'Node.js - TLS Signature' },
  181. { key: 33554631, label: 'Windows bot - TLS Signature' },
  182. { key: 33554632, label: 'PHP - TLS Signature' },
  183. { key: 33554633, label: 'cURL - TLS Signature' },
  184. { key: 33554634, label: 'Java - TLS Signature' },
  185. { key: 33554635, label: 'Golang - TLS Signature' },
  186. { key: 33554636, label: 'cURL - TLS Signature' },
  187. { key: 33554637, label: 'Python - TLS Signature' },
  188. { key: 33554638, label: 'cURL - TLS Signature' },
  189. { key: 33554639, label: 'cURL - TLS Signature' },
  190. { key: 33554640, label: 'Node.js - TLS Signature' },
  191. { key: 33554641, label: 'Node.js - TLS Signature' },
  192. { key: 33554642, label: 'Ruby - TLS Signature' },
  193. { key: 33554643, label: 'Python - TLS Signature' },
  194. { key: 33554644, label: 'Python - TLS Signature' },
  195. { key: 33554645, label: 'cURL - TLS Signature' },
  196. { key: 33554646, label: 'Python - TLS Signature' },
  197. { key: 33554647, label: 'Python - TLS Signature' },
  198. { key: 33554648, label: '.NET framework - TLS Signature' },
  199. { key: 33554649, label: 'Python - TLS Signature' },
  200. { key: 33554650, label: 'Python - TLS Signature' },
  201. { key: 33554652, label: 'Node.js - TLS Signature' },
  202. { key: 33554653, label: 'Python - TLS Signature' },
  203. { key: 33554654, label: 'Unclassified bot - TLS Signature' },
  204. { key: 33554655, label: 'Ruby - TLS Signature' },
  205. { key: 33554656, label: 'Python - TLS Signature' },
  206. { key: 33554657, label: 'Sneakerbot - TLS Signature' },
  207. { key: 33554658, label: 'Perl - TLS Signature' },
  208. { key: 33554659, label: 'Python - TLS Signature' },
  209. { key: 33554660, label: 'Node.js - TLS Signature' },
  210. { key: 33554661, label: 'Openssl client - TLS Signature' },
  211. { key: 33554662, label: 'Node.js - TLS Signature' },
  212. { key: 33554663, label: 'Flexget - TLS Signature' },
  213. { key: 33554665, label: 'Python - TLS Signature' },
  214. { key: 33554666, label: 'Python - TLS Signature' },
  215. { key: 33554669, label: 'Swift - TLS Signature' },
  216. { key: 33554670, label: 'Node.js - TLS Signature' },
  217. { key: 33554671, label: 'Java - TLS Signature' },
  218. { key: 33554672, label: 'Sneakerbot - Request Headers' },
  219. { key: 33554673, label: 'cURL - TLS Signature' },
  220. { key: 33554674, label: 'Python - HTTP Signature' },
  221. { key: 33554675, label: 'Flexget - TLS Signature' },
  222. { key: 33554676, label: 'Sneakerbot - TLS Signature' },
  223. { key: 33554677, label: 'Python - TLS Signature' },
  224. { key: 33554678, label: '.NET framework - TLS Signature' },
  225. { key: 33554679, label: '.NET framework - TLS Signature' },
  226. { key: 33554680, label: '.NET framework - TLS Signature' },
  227. { key: 33554681, label: 'Swift - HTTP Signature' },
  228. { key: 33554684, label: '.NET framework - TLS Signature' },
  229. { key: 33554685, label: '.NET framework - TLS Signature' },
  230. { key: 33554687, label: 'Python - TLS Signature' },
  231. { key: 33554688, label: '.NET framework - TLS Signature' },
  232. { key: 33554689, label: 'Python - TLS Signature' },
  233. { key: 33554690, label: 'Python - TLS Signature' },
  234. { key: 33554691, label: '.NET framework - TLS Signature' },
  235. { key: 33554692, label: '.NET framework - TLS Signature' },
  236. { key: 33554693, label: 'Python - TLS Signature' },
  237. { key: 33554694, label: 'Openssl client - TLS Signature' },
  238. { key: 33554695, label: 'Wget - TLS Signature' },
  239. { key: 33554696, label: 'Python - TLS Signature' },
  240. { key: 33554697, label: 'Flexget - TLS Signature' },
  241. { key: 33554698, label: 'Openssl client - TLS Signature' },
  242. { key: 33554699, label: 'Windows bot - TLS Signature' },
  243. { key: 33554700, label: 'Sneakerbot - TLS Signature' },
  244. { key: 33554701, label: 'cURL - TLS Signature' },
  245. { key: 33554702, label: 'Sneakerbot - TLS Signature' },
  246. { key: 33554703, label: '.NET framework - TLS Signature' },
  247. { key: 33554704, label: 'Sneakerbot - TLS Signature' },
  248. { key: 33554705, label: 'Sneakerbot - Request Headers' },
  249. { key: 33554706, label: 'Sneakerbot - TLS Signature' },
  250. { key: 33554707, label: 'Python - TLS Signature' },
  251. { key: 33554708, label: 'Java - TLS Signature' },
  252. { key: 33554709, label: 'Flexget - TLS Signature' },
  253. { key: 33554710, label: 'Flexget - TLS Signature' },
  254. { key: 33554711, label: 'Flexget - TLS Signature' },
  255. { key: 33554712, label: 'Flexget - TLS Signature' },
  256. { key: 33554713, label: 'Flexget - TLS Signature' },
  257. { key: 33554714, label: 'Sneakerbot - TLS Signature' },
  258. { key: 33554715, label: 'Sneakerbot - TLS Signature' },
  259. { key: 33554716, label: 'Flexget - TLS Signature' },
  260. { key: 33554717, label: 'Java - TLS Signature' },
  261. { key: 33554718, label: 'Sneakerbot - TLS Signature' },
  262. { key: 33554719, label: 'Sneakerbot - Request Headers' },
  263. { key: 33554720, label: 'Flexget - TLS Signature' },
  264. { key: 33554721, label: 'Sneakerbot - TLS Signature' },
  265. { key: 33554723, label: 'Python - TLS Signature' },
  266. { key: 33554724, label: 'Sneakerbot - TLS Signature' },
  267. { key: 33554725, label: 'Sneakerbot - TLS Signature' },
  268. { key: 33554726, label: 'Sneakerbot - Request Headers' },
  269. { key: 33554727, label: 'Sneakerbot - Request Headers' },
  270. { key: 33554728, label: 'Sneakerbot - Request Headers' },
  271. { key: 33554729, label: 'Sneakerbot - Request Headers' },
  272. { key: 33554730, label: 'Sneakerbot - Request Headers' },
  273. { key: 33554731, label: 'Golang - TLS Signature' },
  274. { key: 33554732, label: 'Sneakerbot - TLS Signature' },
  275. { key: 33554733, label: 'Sneakerbot - TLS Signature' },
  276. { key: 33554734, label: 'Sneakerbot - TLS Signature' },
  277. { key: 33554735, label: 'Sneakerbot - TLS Signature' },
  278. { key: 33554736, label: '.NET framework - TLS Signature' },
  279. { key: 33554738, label: 'cURL - TLS Signature' },
  280. { key: 33554739, label: 'Sneakerbot - TLS Signature' },
  281. { key: 33554740, label: 'Sneakerbot - TLS Signature' },
  282. { key: 33554741, label: 'Sneakerbot - TLS Signature' },
  283. { key: 33554742, label: 'Flexget - TLS Signature' },
  284. { key: 33554743, label: 'Flexget - TLS Signature' },
  285. { key: 33554744, label: 'Sneakerbot - TLS Signature' },
  286. { key: 33554745, label: 'Sneakerbot - TLS Signature' },
  287. { key: 33554746, label: 'Sneakerbot - Request Headers' },
  288. { key: 33554747, label: 'Sneakerbot - TLS Signature' },
  289. { key: 33554748, label: 'Sneakerbot - TLS Signature' },
  290. { key: 33554749, label: 'Sneakerbot - TLS Signature' },
  291. { key: 33554750, label: 'Sneakerbot - TLS Signature' },
  292. { key: 33554751, label: 'Sneakerbot - Request Headers' },
  293. { key: 33554752, label: 'Python - TLS Signature' },
  294. { key: 33554753, label: 'Sneakerbot - TLS Signature' },
  295. { key: 33554754, label: 'Sneakerbot - TLS Signature' },
  296. { key: 33554755, label: 'Sneakerbot - TLS Signature' },
  297. { key: 33554757, label: 'Sneakerbot - TLS Signature' },
  298. { key: 33554759, label: 'Sneakerbot - TLS Signature' },
  299. { key: 33554760, label: 'Sneakerbot - TLS Signature' },
  300. { key: 33554761, label: 'Sneakerbot - TLS Signature' },
  301. { key: 33554762, label: 'Sneakerbot - TLS Signature' },
  302. { key: 33554763, label: 'Sneakerbot - TLS Signature' },
  303. { key: 33554764, label: 'Sneakerbot - TLS Signature' },
  304. { key: 33554765, label: 'Unclassified bot - TLS Signature ' },
  305. { key: 33554766, label: 'Sneakerbot - TLS Signature' },
  306. { key: 33554767, label: 'Flexget - TLS Signature' },
  307. { key: 33554768, label: 'Flexget - TLS Signature' },
  308. { key: 33554769, label: 'Flexget - TLS Signature' },
  309. { key: 33554770, label: 'Sneakerbot - TLS Signature' },
  310. { key: 33554771, label: 'Sneakerbot - TLS Signature' },
  311. { key: 33554772, label: 'Sneakerbot - TLS Signature' },
  312. { key: 33554773, label: 'Sneakerbot - TLS Signature' },
  313. { key: 33554774, label: 'cURL - TLS Signature' },
  314. { key: 33554775, label: 'Python - TLS Signature' },
  315. { key: 33554776, label: 'Node.js - TLS Signature' },
  316. { key: 33554777, label: 'Sneakerbot - TLS Signature' },
  317. { key: 33554778, label: 'Sneakerbot - TLS Signature' },
  318. { key: 33554779, label: 'Sneakerbot - TLS Signature' },
  319. { key: 33554780, label: 'Sneakerbot - Request Headers' },
  320. { key: 33554781, label: 'Sneakerbot - TLS Signature' },
  321. { key: 33554782, label: 'ATO Bot - Request Headers' },
  322. { key: 33554783, label: 'Sneakerbot - TLS Signature' },
  323. { key: 33554786, label: 'Unclassified bot - TLS Signature' },
  324. { key: 33554787, label: 'Unclassified bot - TLS Signature' },
  325. { key: 33554788, label: 'Unclassified bot - TLS Signature' },
  326. { key: 33554789, label: 'Sneakerbot - TLS Signature' },
  327. { key: 33554790, label: 'Sneakerbot - TLS Signature' },
  328. { key: 33554791, label: 'Sneakerbot - TLS Signature' },
  329. { key: 33554792, label: '.NET framework - TLS Signature' },
  330. { key: 33554793, label: 'Python - TLS Signature' },
  331. { key: 33554794, label: '.NET framework - TLS Signature' },
  332. { key: 33554795, label: 'ATO Bot - Request Headers' },
  333. { key: 33554796, label: 'Python - TLS Signature' },
  334. { key: 33554797, label: 'Python - TLS Signature' },
  335. { key: 33554798, label: 'Sneakerbot - TLS Signature' },
  336. { key: 33554801, label: 'ATO Bot - TLS Signature' },
  337. { key: 33554802, label: 'Node.js - TLS Signature' },
  338. { key: 33554803, label: '.NET framework - TLS Signature' },
  339. { key: 33554804, label: 'ATO Bot - TLS Signature' },
  340. { key: 33554805, label: 'Vulnerability scanner - TLS Signature' },
  341. { key: 33554806, label: 'cURL - TLS Signature' },
  342. { key: 33554807, label: 'Node.js - TLS Signature ' },
  343. { key: 33554808, label: 'Openssl client - TLS Signature' },
  344. { key: 33554809, label: '.NET framework - TLS Signature ' },
  345. { key: 33554810, label: 'Sneakerbot - TLS Signature' },
  346. { key: 33554811, label: 'Scraping bot - TLS Signature' },
  347. { key: 33554812, label: 'Java - TLS Signature ' },
  348. { key: 33554813, label: 'Java - TLS Signature ' },
  349. { key: 33554814, label: 'Java - TLS Signature ' },
  350. { key: 33554815, label: 'Java - TLS Signature' },
  351. { key: 33554816, label: 'Java - TLS Signature' },
  352. { key: 33554817, label: 'cURL - User-agent' },
  353. { key: 33554818, label: 'Java - TLS Signature ' },
  354. { key: 33554819, label: 'Java - TLS Signature ' },
  355. { key: 33554820, label: 'Java - TLS Signature' },
  356. { key: 33554821, label: 'Java - TLS Signature' },
  357. { key: 33554822, label: 'Openssl client - TLS Signature' },
  358. { key: 33554823, label: 'Node.js - TLS Signature' },
  359. { key: 33554824, label: 'Java - TLS Signature ' },
  360. { key: 33554826, label: 'Java - TLS Signature ' },
  361. { key: 33554827, label: 'Java - TLS Signature ' },
  362. { key: 33554828, label: 'Java - TLS Signature' },
  363. { key: 33554829, label: 'Java - TLS Signature' },
  364. { key: 33554830, label: 'Java - TLS Signature' },
  365. { key: 33554831, label: 'Okhttp bot - TLS Signature' },
  366. { key: 33554832, label: 'Okhttp bot - TLS Signature' },
  367. { key: 33554833, label: 'Perl - TLS Signature' },
  368. { key: 33554834, label: 'Sneakerbot - TLS Signature' },
  369. { key: 33554835, label: 'Sneakerbot - TLS Signature' },
  370. { key: 33554836, label: 'Java - TLS Signature ' },
  371. { key: 33554837, label: 'Java - TLS Signature ' },
  372. { key: 33554838, label: 'Java - TLS Signature ' },
  373. { key: 33554839, label: 'Java - TLS Signature' },
  374. { key: 33554841, label: 'Sneakerbot - TLS Signature' },
  375. { key: 33554842, label: 'Sneakerbot - TLS Signature' },
  376. { key: 33554843, label: 'Windows bot - TLS Signature' },
  377. { key: 33554844, label: 'cURL - TLS Signature ' },
  378. { key: 33554845, label: 'Java - TLS Signature' },
  379. { key: 33554846, label: 'Windows bot - TLS Signature' },
  380. { key: 33554847, label: 'Windows bot - TLS Signature' },
  381. { key: 33554848, label: 'ATO Bot - TLS Signature' },
  382. { key: 33554849, label: 'Sneakerbot - TLS Signature ' },
  383. { key: 33554850, label: 'Windows bot - TLS Signature ' },
  384. { key: 33554851, label: 'Unclassified bot - TLS Signature ' },
  385. { key: 33554852, label: 'ATO Bot - Request Headers' },
  386. { key: 33554853, label: 'Windows bot - TLS Signature' },
  387. { key: 33554854, label: 'ATO Bot - TLS Signature ' },
  388. { key: 33554856, label: 'Python - TLS Signature' },
  389. { key: 33554857, label: 'Python - TLS Signature' },
  390. { key: 33554858, label: 'Python - TLS Signature' },
  391. { key: 33554859, label: 'Python - TLS Signature' },
  392. { key: 33554860, label: 'Python - TLS Signature' },
  393. { key: 33554861, label: 'Python - TLS Signature' },
  394. { key: 33554862, label: 'Python - TLS Signature' },
  395. { key: 33554863, label: 'Python - TLS Signature' },
  396. { key: 33554864, label: 'Mobile app imitator - TLS Signature' },
  397. { key: 33554865, label: 'Mobile app imitator - TLS Signature' },
  398. { key: 33554866, label: 'Vulnerability scanner - TLS Signature' },
  399. { key: 33554867, label: 'Vulnerability scanner - TLS Signature' },
  400. { key: 33554868, label: 'ATO Bot - TLS Signature ' },
  401. { key: 33554869, label: 'Python - TLS Signature' },
  402. { key: 33554871, label: 'cURL - TLS Signature' },
  403. { key: 33554872, label: 'Sneakerbot - TLS Signature' },
  404. { key: 33554873, label: 'Sneakerbot - TLS Signature' },
  405. { key: 33554874, label: 'Python - TLS Signature' },
  406. { key: 33554875, label: 'Unclassified bot - TLS Signature' },
  407. { key: 33554876, label: 'ATO Bot - TLS Signature' },
  408. { key: 33554877, label: 'Sneakerbot - TLS Signature ' },
  409. { key: 33554879, label: 'Sneakerbot - TLS Signature ' },
  410. { key: 33554881, label: 'Erlang - TLS Signature' },
  411. { key: 33554882, label: 'Vulnerability scanner - TLS Signature ' },
  412. { key: 33554883, label: 'ATO Bot - Request Headers' },
  413. { key: 33554884, label: 'php - TLS Signature' },
  414. { key: 33554885, label: 'Browser imitator - Incorrect Browser Headers' },
  415. { key: 33554886, label: 'Browser imitator - Incorrect Browser Headers' },
  416. { key: 33554888, label: 'Browser imitator - Incorrect Browser Headers' },
  417. { key: 33554889, label: 'Browser imitator - Incorrect Browser Headers' },
  418. { key: 33554890, label: 'Browser imitator - Incorrect Browser Headers' },
  419. { key: 33554891, label: 'Browser imitator - Incorrect Browser Headers' },
  420. { key: 33554892, label: 'Browser imitator - Incorrect Browser Headers' },
  421. { key: 33554893, label: 'ATO Bot - Request Headers' },
  422. { key: 33554896, label: 'ATO Bot - Request Headers' },
  423. { key: 33554897, label: '.NET framework - TLS Signature' },
  424. { key: 33554898, label: 'Erlang - TLS Signature ' },
  425. { key: 33554899, label: 'Java - TLS Signature ' },
  426. { key: 33554901, label: 'zennoposter - TLS Signature' },
  427. { key: 33554902, label: 'ATO Bot - TLS Signature' },
  428. { key: 33554903, label: 'ATO Bot - TLS Signature' },
  429. { key: 33554905, label: 'ATO Bot - TLS Signature' },
  430. { key: 33554907, label: 'bitcomet - TLS Signature' },
  431. { key: 33554908, label: 'bitcomet - TLS Signature' },
  432. { key: 33554909, label: 'Mobile app imitator - Request Headers' },
  433. { key: 33554910, label: 'Mobile app imitator - Request Headers' },
  434. { key: 33554911, label: '.NET framework - TLS Signature' },
  435. { key: 33554912, label: 'Unclassified bot - TLS Signature' },
  436. { key: 33554913, label: 'Empty User-agent - User-agent' },
  437. { key: 33554914, label: 'adware - Incorrect Browser Headers' },
  438. { key: 33554915, label: 'Header format - Incorrect Browser Headers' },
  439. { key: 33554916, label: 'Header format - Incorrect Browser Headers' },
  440. { key: 33554917, label: 'Header format - Incorrect Browser Headers' },
  441. { key: 33554918, label: 'Abnormal request - Incorrect Browser Headers' },
  442. { key: 33554919, label: 'Java - TLS Signature ' },
  443. { key: 33554925, label: 'Unclassified bot - TLS Signature' },
  444. { key: 33554926, label: 'Unclassified bot - HTTP Signature' },
  445. { key: 33554927, label: 'DoS Tool - TLS Signature ' },
  446. { key: 33554928, label: 'cURL - HTTP Signature' },
  447. { key: 33554936, label: 'Java - HTTP Signature' },
  448. { key: 33554958, label: 'Unclassified bot - TLS Signature ' },
  449. { key: 33554975, label: 'Unclassified bot - TLS Signature' },
  450. { key: 33555007, label: 'ATO Bot - HTTP Signature' },
  451. { key: 33555060, label: 'Python - User-agent' },
  452. { key: 33555069, label: 'Unclassified bot - TLS Signature' },
  453. { key: 33555071, label: 'Unclassified bot - HTTP Signature' },
  454. { key: 33555072, label: 'Unclassified bot - TLS Signature' },
  455. { key: 33555413, label: 'Python - HTTP Signature' },
  456. { key: 33555516, label: 'Golang - HTTP Signature' },
  457. { key: 33555525, label: 'Golang - HTTP Signature' },
  458. { key: 33555568, label: 'Unclassified bot - Request Headers' },
  459. { key: 33555963, label: 'Python - HTTP Signature' },
  460. { key: 33555965, label: 'Node.js - HTTP Signature' },
  461. { key: 33558213, label: 'Python - TLS Signature ' },
  462. { key: 33558685, label: 'Java - User-agent' },
  463. { key: 33558687, label: 'Node.js - User-agent' },
  464. { key: 33558689, label: 'Golang - User-agent' },
  465. { key: 33558691, label: 'Golang - User-agent' },
  466. { key: 33558693, label: 'Golang - User-agent' },
  467. { key: 33558695, label: 'php - User-agent' },
  468. { key: 33558697, label: 'Erlang - User-agent' },
  469. { key: 33558699, label: 'Python - User-agent' },
  470. { key: 33558701, label: 'Rust - User-agent' },
  471. { key: 33558703, label: '.NET framework - User-agent' },
  472. { key: 33558705, label: 'Scraping bot - User-agent' },
  473. { key: 33558707, label: 'Node.js - User-agent' },
  474. { key: 33558709, label: 'Perl - User-agent' },
  475. { key: 33558711, label: 'Python - User-agent' },
  476. { key: 33558713, label: 'Perl - User-agent' },
  477. { key: 33558715, label: 'Headless browser - User-agent' },
  478. { key: 33558717, label: 'Node.js - User-agent' },
  479. { key: 33558719, label: 'powershell - User-agent' },
  480. { key: 33558721, label: 'Rust - User-agent' },
  481. { key: 33560491, label: 'Unclassified bot - TLS Signature ' },
  482. { key: 33560493, label: 'Unclassified bot - TLS Signature ' },
  483. { key: 33561985, label: 'Unclassified bot - TLS Signature ' },
  484. { key: 33563685, label: 'cURL - TLS Signature ' },
  485. { key: 33563687, label: 'Unclassified bot - TLS Signature ' },
  486. { key: 33563720, label: 'cURL - User-agent' },
  487. { key: 33563722, label: 'Scraping bot - HTTP Signature' },
  488. { key: 33563724, label: 'ATO Bot - HTTP Signature' },
  489. { key: 33563790, label: 'Rust - TLS Signature' },
  490. { key: 33563794, label: 'Java - TLS Signature' },
  491. { key: 33563796, label: 'Noble TLS - TLS Signature' },
  492. { key: 33563798, label: 'cURL - User-agent' },
  493. { key: 33563831, label: 'Python - TLS Signature ' },
  494. { key: 33563833, label: 'Golang - TLS Signature ' },
  495. { key: 33563835, label: 'Python - TLS Signature ' },
  496. { key: 33563837, label: 'Golang - User-agent' },
  497. { key: 33563839, label: 'SEO Tool User-agent - User-agent' },
  498. { key: 33563841, label: 'AI Bot - User-agent' },
  499. { key: 33563843, label: 'AI Bot - User-agent' },
  500. { key: 33563845, label: 'apple - User-agent' },
  501. { key: 33563847, label: 'AI Bot - User-agent' },
  502. { key: 33563849, label: 'AI Bot - User-agent' },
  503. { key: 33563851, label: 'AI Bot - User-agent' },
  504. { key: 33563853, label: 'AI Bot - User-agent' },
  505. { key: 33563855, label: 'AI Bot - User-agent' },
  506. { key: 33563857, label: 'AI Bot - User-agent' },
  507. { key: 33563859, label: 'AI Bot - User-agent' },
  508. { key: 33563861, label: 'AI Bot - User-agent' },
  509. { key: 33563863, label: 'AI Bot - User-agent' },
  510. { key: 33563865, label: 'SEO Tool User-agent - User-agent' },
  511. { key: 33563867, label: 'AI Bot - User-agent' },
  512. { key: 33563869, label: 'AI Bot - User-agent' },
  513. { key: 33563871, label: 'Golang - User-agent' },
  514. { key: 33563873, label: 'Golang - User-agent' },
  515. { key: 33563875, label: 'AI Bot - User-agent' },
  516. { key: 33563877, label: 'AI Bot - User-agent' },
  517. { key: 33563879, label: 'Data bot - User-agent' },
  518. { key: 33563881, label: 'AI Bot - User-agent' },
  519. { key: 33563883, label: 'AI Bot - User-agent' },
  520. { key: 33563885, label: 'AI Bot - User-agent' },
  521. { key: 33563887, label: 'Data bot - User-agent' },
  522. { key: 33563889, label: 'AI Bot - User-agent' },
  523. { key: 33563891, label: 'AI Bot - User-agent' },
  524. { key: 33563893, label: 'AI Bot - User-agent' },
  525. { key: 33563895, label: 'AI Bot - User-agent' },
  526. { key: 33563897, label: 'AI Bot - User-agent' },
  527. { key: 33563899, label: 'AI Bot - User-agent' },
  528. { key: 33563901, label: 'Unclassified bot - TLS Signature ' },
  529. { key: 33563903, label: 'Java - TLS Signature ' },
  530. { key: 33563905, label: 'Java - TLS Signature ' },
  531. { key: 33563907, label: 'Vulnerability scanner - User-agent' },
  532. { key: 33563914, label: 'Python - TLS Signature ' },
  533. { key: 33563916, label: 'Python - TLS Signature ' },
  534. { key: 33563918, label: 'Python - TLS Signature ' },
  535. { key: 33563920, label: 'Vulnerability scanner - User-agent' },
  536. { key: 33563922, label: 'Python - TLS Signature ' },
  537. { key: 33563924, label: 'Python - TLS Signature ' },
  538. { key: 33563926, label: 'Unclassified bot - TLS Signature ' },
  539. { key: 33563928, label: 'Scraping Bot - TLS Signature ' },
  540. { key: 33563930, label: 'Unclassified bot - TLS Signature ' },
  541. { key: 33563932, label: 'Python - TLS Signature ' },
  542. { key: 33563965, label: 'Headless browser - TLS Signature ' },
  543. { key: 33563967, label: 'Unclassified bot - TLS Signature ' },
  544. { key: 33563970, label: 'AI Bot - User-agent' },
  545. { key: 33563972, label: 'AI Bot - User-agent' },
  546. { key: 33563974, label: 'AI Bot - User-agent' },
  547. { key: 33563976, label: 'AI Bot - User-agent' },
  548. { key: 33563978, label: 'AI Bot - User-agent' },
  549. { key: 33563980, label: 'AI Bot - User-agent' },
  550. { key: 33563982, label: 'AI Bot - User-agent' },
  551. { key: 33563984, label: 'AI Bot - User-agent' },
  552. { key: 33563986, label: 'AI Bot - User-agent' },
  553. { key: 33563988, label: 'Scraping bot - TLS Signature ' },
  554. { key: 33563990, label: 'Unclassified bot - TLS Signature ' },
  555. { key: 33563992, label: 'Unclassified bot - TLS Signature ' },
  556. { key: 33563994, label: 'Unclassified bot - TLS Signature ' },
  557. { key: 33563996, label: 'Python - TLS Signature ' },
  558. { key: 33563998, label: 'Unclassified bot - TLS Signature ' },
  559. { key: 33564000, label: 'Unclassified bot - TLS Signature' },
  560. { key: 33564002, label: 'Unclassified bot - TLS Signature' },
  561. { key: 33564033, label: 'AI Bot - User-agent' },
  562. { key: 33564035, label: 'AI Bot - User-agent' },
  563. { key: 33564037, label: 'AI Bot - User-agent' },
  564. { key: 33564039, label: 'AI Bot - User-agent' },
  565. { key: 33564041, label: 'AI Bot - User-agent' },
  566. { key: 33564043, label: 'AI Bot - User-agent' },
  567. { key: 33564045, label: 'AI Bot - User-agent' },
  568. { key: 33564047, label: 'AI Bot - User-agent' },
  569. { key: 33564049, label: 'AI Bot - User-agent' },
  570. { key: 33564051, label: 'AI Bot - User-agent' },
  571. { key: 33564053, label: 'AI Bot - User-agent' },
  572. { key: 33564055, label: 'AI Bot - User-agent' },
  573. { key: 33564057, label: 'AI Bot - User-agent' },
  574. { key: 33564059, label: 'Python - TLS Signature ' },
  575. { key: 33564061, label: 'cURL - TLS Signature ' },
  576. { key: 33564063, label: 'Java - TLS Signature ' },
  577. { key: 33564065, label: 'Java - TLS Signature ' },
  578. { key: 33564067, label: 'Unclassified bot - TLS Signature ' },
  579. { key: 33564069, label: 'Unclassified bot - TLS Signature ' },
  580. { key: 33564071, label: 'Unclassified bot - TLS Signature ' },
  581. { key: 33564073, label: 'Unclassified bot - TLS Signature ' },
  582. { key: 33564075, label: 'Unclassified bot - TLS Signature ' },
  583. { key: 33564077, label: 'Unclassified bot - TLS Signature ' },
  584. { key: 33564112, label: 'Python - TLS Signature ' },
  585. { key: 33564114, label: 'Unclassified bot - TLS Signature ' },
  586. { key: 33564116, label: 'Unclassified bot - TLS Signature ' },
  587. { key: 33564118, label: 'Unclassified bot - TLS Signature ' },
  588. { key: 33564120, label: 'Unclassified bot - TLS Signature ' },
  589. { key: 33564122, label: 'Unclassified bot - TLS Signature ' },
  590. { key: 33564124, label: 'Unclassified bot - TLS Signature ' },
  591. { key: 33564126, label: 'Unclassified bot - TLS Signature ' },
  592. { key: 33564128, label: 'Unclassified bot - TLS Signature ' },
  593. { key: 33564130, label: 'Unclassified bot - TLS Signature ' },
  594. { key: 33564132, label: 'AI Bot - User-agent' },
  595. { key: 33564134, label: 'Rust - User-agent' },
  596. { key: 33564137, label: 'Unclassified bot - TLS Signature ' },
  597. { key: 33564139, label: 'Unclassified bot - TLS Signature ' },
  598. { key: 33564141, label: 'Golang - TLS Signature ' },
  599. { key: 33564143, label: 'Unclassified bot - TLS Signature ' },
  600. { key: 33564145, label: 'Golang - TLS Signature ' },
  601. { key: 33564147, label: 'Node.js - TLS Signature ' },
  602. { key: 33564149, label: 'Golang - TLS Signature ' },
  603. { key: 33564151, label: 'Golang - TLS Signature ' },
  604. { key: 33564153, label: 'Unclassified bot - TLS Signature ' },
  605. { key: 33564155, label: 'cURL - TLS Signature ' },
  606. { key: 33564157, label: 'cURL - HTTP Signature' },
  607. { key: 33564159, label: 'cURL - TLS Signature' },
  608. { key: 33564161, label: 'Java - TLS Signature ' },
  609. { key: 33564163, label: 'Sneakerbot - TLS Signature ' },
  610. { key: 33564165, label: 'Sneakerbot - HTTP Signature' },
  611. { key: 33564167, label: 'Sneakerbot - TLS Signature ' },
  612. { key: 33564169, label: 'Sneakerbot - TLS Signature ' },
  613. { key: 33564171, label: 'Sneakerbot - TLS Signature ' },
  614. { key: 33564173, label: 'Sneakerbot - TLS Signature ' },
  615. { key: 33564175, label: 'Sneakerbot - TLS Signature ' },
  616. { key: 33564178, label: 'Sneakerbot - TLS Signature ' },
  617. { key: 33564180, label: 'Unclassified bot - TLS Signature ' },
  618. { key: 33564182, label: 'Unclassified bot - TLS Signature ' },
  619. { key: 33564184, label: 'Unclassified bot - TLS Signature ' },
  620. { key: 33564186, label: 'Unclassified bot - TLS Signature ' },
  621. { key: 33564188, label: 'Unclassified bot - TLS Signature ' },
  622. { key: 33564190, label: 'Python - TLS Signature ' },
  623. { key: 33564192, label: 'Unclassified bot - TLS Signature ' },
  624. { key: 33564194, label: 'Unclassified bot - TLS Signature ' },
  625. { key: 33564196, label: 'Unclassified bot - TLS Signature ' },
  626. { key: 33564198, label: 'Unclassified bot - TLS Signature ' },
  627. { key: 33564200, label: 'Vulnerability scanner - User-agent' },
  628. { key: 33564202, label: 'Vulnerability scanner - User-agent' },
  629. { key: 33564205, label: 'Python - TLS Signature ' },
  630. { key: 33564207, label: 'Java - TLS Signature ' },
  631. { key: 33564209, label: 'Unclassified bot - TLS Signature ' },
  632. { key: 33564213, label: 'Unclassified bot - TLS Signature ' },
  633. { key: 33564215, label: 'Vulnerability scanner - User-agent' },
  634. { key: 33564217, label: 'Scraping bot - HTTP Signature' },
  635. { key: 33564219, label: 'Unclassified bot - TLS Signature ' },
  636. { key: 33564221, label: 'Golang - TLS Signature ' },
  637. { key: 33564223, label: 'DoS Tool - TLS Signature ' },
  638. { key: 33564225, label: 'DoS Tool - HTTP Signature' },
  639. { key: 50331648, label: 'ASN Anomaly' },
  640. { key: 50331649, label: 'TLS Signature Anomaly' },
  641. { key: 50331650, label: 'IP Anomaly' },
  642. { key: 117452381, label: 'Bing Ads - Verified bot' },
  643. { key: 117461756, label: 'HIFIBot - Verified bot' },
  644. { key: 117468859, label: 'WPMU DEV Broken Link Checker - Verified bot' },
  645. { key: 117475723, label: 'Slickstream - Verified bot' },
  646. { key: 117479730, label: 'BingBot - Verified bot' },
  647. { key: 117497732, label: 'Retool - Verified bot' },
  648. { key: 117517650, label: 'Cert Chief - Verified bot' },
  649. { key: 117617846, label: 'UptimeRobot - Verified bot' },
  650. { key: 117646504, label: 'ImpactitAutomatedTestSuite - Verified bot' },
  651. { key: 117654846, label: 'Google-PageRenderer - Verified bot' },
  652. { key: 117713511, label: 'EzoicBot - Verified bot' },
  653. { key: 117822238, label: 'Google Site Verification - Verified bot' },
  654. { key: 117825325, label: 'Cisco Umbrella - Verified bot' },
  655. { key: 117910511, label: 'Reward Gateway - Verified bot' },
  656. { key: 117944015, label: 'Yokoy Group Webhooks - Verified bot' },
  657. { key: 117968389, label: 'PWABuilder - Verified bot' },
  658. { key: 117991028, label: 'WMF Zotero Translation Server - Verified bot' },
  659. { key: 118017649, label: 'Swifteq Link Checker - Verified bot' },
  660. { key: 118029263, label: 'logicmonitor - Verified bot' },
  661. { key: 118035830, label: 'Sucuri - Verified bot' },
  662. { key: 118039197, label: 'Google AdsBot - Verified bot' },
  663. { key: 118137613, label: 'Acquia optimize (Monsido) - Verified bot' },
  664. { key: 118138532, label: 'Innologica - Verified bot' },
  665. { key: 118139771, label: 'Awario - Verified bot' },
  666. { key: 118145000, label: 'Prerender - Verified bot' },
  667. { key: 118152435, label: 'Google Images - Verified bot' },
  668. { key: 118180334, label: 'YandexBot - Verified bot' },
  669. { key: 118196635, label: 'Sogou - Verified bot' },
  670. { key: 118273969, label: 'Site24x7 - Verified bot' },
  671. { key: 118342630, label: 'Brandwatch - Verified bot' },
  672. { key: 118375885, label: 'PrintFriendly - Verified bot' },
  673. { key: 118395543, label: 'WebTotemBot - Verified bot' },
  674. { key: 118399871, label: 'Instapaper - Verified bot' },
  675. { key: 118536588, label: 'Coveo Bot - Verified bot' },
  676. { key: 118549552, label: 'Doctom Monitor - Verified bot' },
  677. { key: 118580393, label: 'Mediavine Medatada Parser - Verified bot' },
  678. { key: 118597781, label: 'UptimeBot - Verified bot' },
  679. { key: 118601807, label: 'Amazonbot - Verified bot' },
  680. { key: 118652724, label: 'Prisma Access - Verified bot' },
  681. { key: 118692916, label: 'Oh Dear - Verified bot' },
  682. { key: 118731042, label: 'PayPal - Verified bot' },
  683. { key: 118746560, label: 'Watchful - Verified bot' },
  684. { key: 118825126, label: 'Rakuten Image extraction bot - Verified bot' },
  685. { key: 118840746, label: 'Apple App Site Association - Verified bot' },
  686. { key: 118841730, label: 'Cloudflare Purge - Verified bot' },
  687. { key: 118860079, label: 'OurFamilyWizard - Verified bot' },
  688. { key: 118883123, label: 'SEO Audit Check Bot - Verified bot' },
  689. { key: 118942125, label: 'FullStory - Verified bot' },
  690. { key: 118968267, label: 'ICC Crawler - Verified bot' },
  691. { key: 118976501, label: 'Yeti by Naver - Verified bot' },
  692. { key: 119101331, label: 'Alexa Archive - Verified bot' },
  693. { key: 119161837, label: 'SkroutzBot - Verified bot' },
  694. { key: 119230104, label: 'AddSearchBot - Verified bot' },
  695. { key: 119240037, label: 'Macrobondbot - Verified bot' },
  696. { key: 119249190, label: 'Grapeshot - Verified bot' },
  697. { key: 119256804, label: 'NewsBlur - Verified bot' },
  698. { key: 119357029, label: 'Cookiebot - Verified bot' },
  699. { key: 119386758, label: 'Google Digital Asset Links - Verified bot' },
  700. { key: 119430691, label: 'Drata Autopilot - Verified bot' },
  701. { key: 119451472, label: 'LingueeBot - Verified bot' },
  702. { key: 119468898, label: 'SmartologyBot - Verified bot' },
  703. { key: 119708667, label: 'kb.dk_bot - Verified bot' },
  704. { key: 119741217, label: 'SE Ranking Bot - Verified bot' },
  705. { key: 119742680, label: 'LinkedInBot - Verified bot' },
  706. { key: 119743017, label: 'SendGrid - Verified bot' },
  707. { key: 119769752, label: 'ClearscopeBot - Verified bot' },
  708. { key: 119770846, label: 'Reelevant - Verified bot' },
  709. { key: 119777256, label: 'Marginalia Search - Verified bot' },
  710. { key: 119802998, label: 'Jetpack - Verified bot' },
  711. { key: 119851305, label: 'RetroListeCOM - Verified bot' },
  712. { key: 119862967, label: 'Twilio Proxy - Verified bot' },
  713. { key: 119889021, label: 'Semrushbot - Verified bot' },
  714. { key: 119913775, label: 'Jumio - Verified bot' },
  715. { key: 119931746, label: 'Limber.IO - Verified bot' },
  716. { key: 119945317, label: 'Buttondown RSS-Feed-Parser - Verified bot' },
  717. { key: 120007959, label: 'Google Scholar - Verified bot' },
  718. { key: 120079405, label: 'Bling ERP - Verified bot' },
  719. { key: 120080928, label: 'CopyMeThatBot - Verified bot' },
  720. { key: 120103501, label: 'Gigabot - Verified bot' },
  721. { key: 120176742, label: 'PerplexityBot - Verified bot' },
  722. { key: 120216569, label: 'EasyCron - Verified bot' },
  723. { key: 120228091, label: 'WPMUDEV Uptime Monitor 5.0 - Verified bot' },
  724. { key: 120293842, label: 'Modular DS - Verified bot' },
  725. { key: 120405226, label: 'Orlo Link Preview - Verified bot' },
  726. { key: 120424214, label: 'Applebot - Verified bot' },
  727. { key: 120426845, label: 'Freshping - Verified bot' },
  728. { key: 120512708, label: 'EasyBill Import Manager - Verified bot' },
  729. { key: 120543530, label: 'Opengraph Bot - Verified bot' },
  730. { key: 120575366, label: 'Steam Chat - Verified bot' },
  731. { key: 120580905, label: 'BigUpData Bot - Verified bot' },
  732. { key: 120602561, label: 'Google Publisher Center - Verified bot' },
  733. { key: 120617850, label: 'Google-AdWords-Express - Verified bot' },
  734. { key: 120618378, label: 'ActiveComply Bot - Verified bot' },
  735. { key: 120623194, label: 'GoogleBot - Verified bot' },
  736. { key: 120711141, label: 'deadlinkchecker - Verified bot' },
  737. { key: 120776641, label: 'BrightEdge Bot - Verified bot' },
  738. { key: 120846254, label: 'Cloudflare Digicert DCV - Verified bot' },
  739. { key: 120850273, label: 'Google API - Verified bot' },
  740. { key: 120888980, label: 'Cloudtrellis - Verified bot' },
  741. { key: 120911716, label: 'LinkChecker Bot - Verified bot' },
  742. { key: 120938397, label: 'UCSD Sysnet Academic Crawler - Verified bot' },
  743. { key: 120981230, label: 'Google Schema Markup Testing Tool - Verified bot' },
  744. { key: 120992776, label: 'Daum - Verified bot' },
  745. { key: 120997678, label: 'Stripe - Verified bot' },
  746. { key: 121018068, label: 'Datenbank Crawler - Verified bot' },
  747. { key: 121130486, label: 'Microsoft Preview - Verified bot' },
  748. { key: 121141878, label: 'Kagi Bot - Verified bot' },
  749. { key: 121165033, label: 'Potions - Verified bot' },
  750. { key: 121186013, label: 'Skroutz ImageBot - Verified bot' },
  751. { key: 121194612, label: 'Loomly Bot - Verified bot' },
  752. { key: 121229731, label: 'Pulsetic - Verified bot' },
  753. { key: 121349130, label: 'Yahoo Link Preview - Verified bot' },
  754. { key: 121451232, label: 'Ahrefs Site Audit - Verified bot' },
  755. { key: 121548236, label: 'Make Platform - Verified bot' },
  756. { key: 121577532, label: 'Google Safety - Verified bot' },
  757. { key: 121618595, label: 'Facebook - Verified bot' },
  758. { key: 121639301, label: 'Linespider - Verified bot' },
  759. { key: 121797637, label: 'Jagged Pixel UptimeBot - Verified bot' },
  760. { key: 121899484, label: 'videootv Bot - Verified bot' },
  761. { key: 121952577, label: 'Witness Ai - Verified bot' },
  762. { key: 121963421, label: 'Mojeek - Verified bot' },
  763. { key: 121972032, label: 'NixStatsMonitoringBot - Verified bot' },
  764. { key: 122006524, label: 'ConvermaxBot - Verified bot' },
  765. { key: 122050264, label: 'HubSpot Feed Fetcher - Verified bot' },
  766. { key: 122069580, label: 'Amazon AdBot - Verified bot' },
  767. { key: 122089013, label: 'Onetrust CMP Scanner - Verified bot' },
  768. { key: 122096514, label: 'Termly - Verified bot' },
  769. { key: 122103746, label: 'Online Webceo Bot - Verified bot' },
  770. { key: 122124699, label: 'Splunk - Verified bot' },
  771. { key: 122141928, label: 'FoxBot - Verified bot' },
  772. { key: 122153532, label: 'Baidu ADS Server Proxy - Verified bot' },
  773. { key: 122184053, label: 'Qwantbot - Verified bot' },
  774. { key: 122188770, label: 'Cloudflare Custom Hostname Verification - Verified bot' },
  775. { key: 122188945, label: 'MirrorWebCrawler - Verified bot' },
  776. { key: 122208228, label: 'Google Inspection Tool - Verified bot' },
  777. { key: 122222118, label: 'Collapsify - Verified bot' },
  778. { key: 122223833, label: 'Nodeping - Verified bot' },
  779. { key: 122256215, label: 'Factset_spyderbot - Verified bot' },
  780. { key: 122293105, label: 'Bushbaby - Verified bot' },
  781. { key: 122293205, label: 'New Relic - Verified bot' },
  782. { key: 122296797, label: 'Shortwave Image Fetcher - Verified bot' },
  783. { key: 122331384, label: 'Mollie Bot - Verified bot' },
  784. { key: 122333288, label: 'Server Density - Verified bot' },
  785. { key: 122349057, label: 'rss2tg_bot - Verified bot' },
  786. { key: 122426128, label: 'Yahoo Japan SEO Crawler - Verified bot' },
  787. { key: 122455622, label: 'Forcepoint - Verified bot' },
  788. { key: 122483248, label: 'Spectate - Verified bot' },
  789. { key: 122489482, label: 'Trustly - Verified bot' },
  790. { key: 122619965, label: 'WorldPay - Verified bot' },
  791. { key: 122674714, label: 'PaesslerCloudBot - Verified bot' },
  792. { key: 122675136, label: 'Detectify - Verified bot' },
  793. { key: 122676052, label: 'MailRUBot - Verified bot' },
  794. { key: 122783515, label: 'Rackspace - Verified bot' },
  795. { key: 122804832, label: 'PressEngine Bot - Verified bot' },
  796. { key: 122811173, label: 'Qualys SSL Scanner - Verified bot' },
  797. { key: 122886485, label: 'ZoomInfo - Verified bot' },
  798. { key: 122907302, label: 'Notabot - Verified bot' },
  799. { key: 122934878, label: 'LinksIndexerBot - Verified bot' },
  800. { key: 123000706, label: 'Better Uptime - Verified bot' },
  801. { key: 123127211, label: 'Freespoke - Verified bot' },
  802. { key: 123151907, label: 'WatchMouse - Verified bot' },
  803. { key: 123186684, label: 'Alertsite by Smartbear - Verified bot' },
  804. { key: 123196403, label: 'Akamai Threat Protector - Verified bot' },
  805. { key: 123243225, label: 'SMTnet PM Bot - Verified bot' },
  806. { key: 123270683, label: 'KargoBot-Artemis - Verified bot' },
  807. { key: 123277490, label: 'Algolia - Verified bot' },
  808. { key: 123280677, label: 'Zendesk Webhook - Verified bot' },
  809. { key: 123309633, label: 'Yahoo! JAPAN - Verified bot' },
  810. { key: 123386127, label: 'Dataprovider.com - Verified bot' },
  811. { key: 123394264, label: 'FDL Stats Bots - Verified bot' },
  812. { key: 123439742, label: 'TurnitinBot - Verified bot' },
  813. { key: 123585877, label: 'Stape Scanner - Verified bot' },
  814. { key: 123603536, label: 'Semrush Link Building Tool - Verified bot' },
  815. { key: 123619739, label: 'BinaryCanary - Verified bot' },
  816. { key: 123660167, label: 'Seznam - Verified bot' },
  817. { key: 123737729, label: 'SecurityHeaders - Verified bot' },
  818. { key: 123815556, label: 'GPTBot - Verified bot' },
  819. { key: 123853228, label: 'HoneybadgerBot - Verified bot' },
  820. { key: 123862922, label: 'Nooshub - Verified bot' },
  821. { key: 123865897, label: 'Google Videos - Verified bot' },
  822. { key: 123869909, label: 'Bibliotheque Nacional de France Crawler - Verified bot' },
  823. { key: 123881983, label: 'SkyHigh Security SWG - Verified bot' },
  824. { key: 123892163, label: 'UpDownBot - Verified bot' },
  825. { key: 123893906, label: 'MonitoRSS - Verified bot' },
  826. { key: 123909607, label: 'catchpoint - Verified bot' },
  827. { key: 123945485, label: 'Menlo Security Gateway - Verified bot' },
  828. { key: 124033017, label: "Let's Encrypt - Verified bot" },
  829. { key: 124033152, label: 'VaultPress - Verified bot' },
  830. { key: 124082211, label: 'SearchAtlas Bot - Verified bot' },
  831. { key: 124092144, label: 'HubSpot Page Fetcher - Verified bot' },
  832. { key: 124121487, label: 'Bazqux - Verified bot' },
  833. { key: 124132802, label: 'RSS API - Verified bot' },
  834. { key: 124139111, label: 'ContentKing - Verified bot' },
  835. { key: 124150991, label: 'PetalBot - Verified bot' },
  836. { key: 124179547, label: 'WP Umbrella Bot - Verified bot' },
  837. { key: 124206785, label: 'WARDBot - Verified bot' },
  838. { key: 124238076, label: 'SmarshBot - Verified bot' },
  839. { key: 124265885, label: 'Google Favicon - Verified bot' },
  840. { key: 124312264, label: 'Blogtrottr - Verified bot' },
  841. { key: 124352628, label: 'Synthetic Bot - Verified bot' },
  842. { key: 124421193, label: 'Sora Caisse POS - Verified bot' },
  843. { key: 124435375, label: 'CloudValid Bot - Verified bot' },
  844. { key: 124439523, label: 'Yahoo Mail - Verified bot' },
  845. { key: 124451372, label: 'StatusCake - Verified bot' },
  846. { key: 124496772, label: 'ChargeBee - Verified bot' },
  847. { key: 124503518, label: 'cookie maestro - Verified bot' },
  848. { key: 124569440, label: 'Alexa Site Audit - Verified bot' },
  849. { key: 124581738, label: 'Meta-ExternalAgent - Verified bot' },
  850. { key: 124614502, label: 'WP Umbrella - Verified bot' },
  851. { key: 124689706, label: 'XY Archive Compliance Bot - Verified bot' },
  852. { key: 124769389, label: 'SparkpostBot - Verified bot' },
  853. { key: 124795928, label: 'Bluesky Link Preview Service - Verified bot' },
  854. { key: 124851431, label: 'Salesforce - Verified bot' },
  855. { key: 124895971, label: 'webpagetest - Verified bot' },
  856. { key: 124923457, label: 'Cốc Cốc - Verified bot' },
  857. { key: 124924936, label: 'AddThis - Verified bot' },
  858. { key: 125004316, label: 'Epivoz Crawler - Verified bot' },
  859. { key: 125019905, label: 'Foregenix ThreatView/WebScan - Verified bot' },
  860. { key: 125031301, label: 'Bitbucket - Verified bot' },
  861. { key: 125098700, label: 'Hatena - Verified bot' },
  862. { key: 125106627, label: 'SiteAuditBot - Verified bot' },
  863. { key: 125111252, label: 'Thousand Eyes Cloud Agent - Verified bot' },
  864. { key: 125126137, label: 'FedReporter Bot for FFIEC - Verified bot' },
  865. { key: 125128007, label: 'SeobilityBot - Verified bot' },
  866. { key: 125136138, label: 'FeedWind Crawler - Verified bot' },
  867. { key: 125137661, label: 'Capital One Bot - Verified bot' },
  868. { key: 125141994, label: 'GTmetrix - Verified bot' },
  869. { key: 125162514, label: 'Parse.ly - Verified bot' },
  870. { key: 125187168, label: 'Protopage - Verified bot' },
  871. { key: 125215085, label: '360Monitoring - Verified bot' },
  872. { key: 125254570, label: 'LINER Bot - Verified bot' },
  873. { key: 125270702, label: 'Ozon Web Grabber - Verified bot' },
  874. { key: 125308987, label: 'Netskope - Verified bot' },
  875. { key: 125335272, label: 'Monitis - Verified bot' },
  876. { key: 125350483, label: 'LegalMonster - Verified bot' },
  877. { key: 125396237, label: 'SequelWP - Verified bot' },
  878. { key: 125404561, label: 'cognitiveSEO Crawler - Verified bot' },
  879. { key: 125431946, label: 'Akismet - Verified bot' },
  880. { key: 125433636, label: 'Lookout SASE - Verified bot' },
  881. { key: 125436155, label: 'Netcraft - Verified bot' },
  882. { key: 125500883, label: 'Telegram Bot - Verified bot' },
  883. { key: 125517114, label: 'StatsDroneBot - Verified bot' },
  884. { key: 125572179, label: 'ServerHunterSpider - Verified bot' },
  885. { key: 125618639, label: 'SpiderPig - Verified bot' },
  886. { key: 125639971, label: 'Netvigie - Verified bot' },
  887. { key: 125674304, label: 'MediaMonitoringBot - Verified bot' },
  888. { key: 125719418, label: 'Readable - Verified bot' },
  889. { key: 125742518, label: 'Kinsta - Verified bot' },
  890. { key: 125773614, label: 'UptrendsBot - Verified bot' },
  891. { key: 125788198, label: 'ProjectShield Url Check - Verified bot' },
  892. { key: 125816561, label: 'Exodus - Verified bot' },
  893. { key: 125844788, label: 'Exabot - Verified bot' },
  894. { key: 125845271, label: 'WebSpiderMount - Verified bot' },
  895. { key: 125863891, label: 'Attracta - Verified bot' },
  896. { key: 125960595, label: 'Recurly Webhooks - Verified bot' },
  897. { key: 125968726, label: 'Noibu JS Beautifier - Verified bot' },
  898. { key: 125996126, label: 'Qualys - Verified bot' },
  899. { key: 126058259, label: 'HSTS preload bot - Verified bot' },
  900. { key: 126063440, label: 'Revvim - Verified bot' },
  901. { key: 126083920, label: 'Yahoo Slurp - Verified bot' },
  902. { key: 126095099, label: 'Barkrowler - Verified bot' },
  903. { key: 126116054, label: 'Cloudflare Diagnostics - Verified bot' },
  904. { key: 126138716, label: 'MelonMesa Bot - Verified bot' },
  905. { key: 126156804, label: 'PingPing Bot - Verified bot' },
  906. { key: 126162430, label: 'Hotjar - Verified bot' },
  907. { key: 126172165, label: 'Channable - Verified bot' },
  908. { key: 126212165, label: 'OutsellURLValidator - Verified bot' },
  909. { key: 126255384, label: 'OAI-SearchBot - Verified bot' },
  910. { key: 126267472, label: 'Fastmail Bot - Verified bot' },
  911. { key: 126282788, label: 'DataForSEO - Verified bot' },
  912. { key: 126287954, label: 'ManageWP - Verified bot' },
  913. { key: 126518054, label: 'Arquivo Web Crawler - Verified bot' },
  914. { key: 126590737, label: 'NewsNow - Verified bot' },
  915. { key: 126642733, label: 'Dr. Link Check - Verified bot' },
  916. { key: 126662428, label: 'WOVN Crawler - Verified bot' },
  917. { key: 126666910, label: 'DuckAssistbot - Verified bot' },
  918. { key: 126723210, label: 'UptimeStatistics - Verified bot' },
  919. { key: 126757287, label: 'Deepcrawl - Verified bot' },
  920. { key: 126799217, label: 'Marinus Crawler - Verified bot' },
  921. { key: 126853454, label: 'Noorobot - Verified bot' },
  922. { key: 126864325, label: 'Crawlson - Verified bot' },
  923. { key: 126871775, label: 'Perplexity‑User - Verified bot' },
  924. { key: 126879075, label: 'Determ - Verified bot' },
  925. { key: 126880202, label: 'SiteUpTimeBot - Verified bot' },
  926. { key: 126910297, label: 'StatistikAustria - Verified bot' },
  927. { key: 126953591, label: 'Outbrain - Verified bot' },
  928. { key: 126987487, label: 'Techloq - Verified bot' },
  929. { key: 126995338, label: 'Pro Sitemaps - Verified bot' },
  930. { key: 127003635, label: 'Coinbase Webhooks - Verified bot' },
  931. { key: 127055198, label: 'Proximic - Verified bot' },
  932. { key: 127111247, label: 'HubSpot Crawler - Verified bot' },
  933. { key: 127145171, label: 'BlogVault - Verified bot' },
  934. { key: 127158783, label: 'Statabot - Verified bot' },
  935. { key: 127215224, label: 'Google Trust Services (DCV Check) - Verified bot' },
  936. { key: 127235789, label: 'WordCountBot - Verified bot' },
  937. { key: 127262324, label: 'Blockaid - Verified bot' },
  938. { key: 127354986, label: 'Cloudflare Stream Webhook - Verified bot' },
  939. { key: 127415497, label: 'Alexa - Verified bot' },
  940. { key: 127465324, label: 'BLEXBot - Verified bot' },
  941. { key: 127478516, label: 'MonSpark - Verified bot' },
  942. { key: 127484685, label: 'CaliberBot - Verified bot' },
  943. { key: 127525740, label: 'MachineLearningForPeaceBot - Verified bot' },
  944. { key: 127532653, label: 'Snipcart - Verified bot' },
  945. { key: 127630897, label: 'SiteSearch360 - Verified bot' },
  946. { key: 127644739, label: 'IAS crawler - Verified bot' },
  947. { key: 127648025, label: 'PinterestBot - Verified bot' },
  948. { key: 127661358, label: 'Black Duck Fast Dynamic - Verified bot' },
  949. { key: 127692545, label: 'Innguma Fetcher - Verified bot' },
  950. { key: 127695837, label: 'Hype Machine - Verified bot' },
  951. { key: 127801916, label: 'Quantcastbot - Verified bot' },
  952. { key: 127853217, label: 'Cloudflare CSUP - Verified bot' },
  953. { key: 127960750, label: 'Uptime Robot - Verified bot' },
  954. { key: 127961504, label: 'OpenRSS - Verified bot' },
  955. { key: 128009269, label: 'SalesViewerBot - Verified bot' },
  956. { key: 128014955, label: 'Panopta - Verified bot' },
  957. { key: 128053236, label: 'Checkly Bot - Verified bot' },
  958. { key: 128094273, label: 'Tumblr - Verified bot' },
  959. { key: 128144419, label: 'Feedbin - Verified bot' },
  960. { key: 128248785, label: 'Google Web Snippet - Verified bot' },
  961. { key: 128297837, label: 'Shopify-Captain-Hook - Verified bot' },
  962. { key: 128320166, label: 'BugsNag - Verified bot' },
  963. { key: 128343542, label: 'Bang & Olufsen - Verified bot' },
  964. { key: 128431734, label: 'MSN - Verified bot' },
  965. { key: 128432004, label: 'AccessStatus - Verified bot' },
  966. { key: 128619256, label: 'HostTracker - Verified bot' },
  967. { key: 128626374, label: 'Artemis Web Reader - Verified bot' },
  968. { key: 128636172, label: 'Splunk Attack Analyzer - Verified bot' },
  969. { key: 128643785, label: 'Uptime LLC - Verified bot' },
  970. { key: 128660910, label: 'Agency Analytics Crawler - Verified bot' },
  971. { key: 128700020, label: 'Neevabot - Verified bot' },
  972. { key: 128709283, label: 'Zapier - Verified bot' },
  973. { key: 128742444, label: 'Medialogia Bot - Verified bot' },
  974. { key: 128792872, label: 'Huckabuy Bot - Verified bot' },
  975. { key: 128846250, label: 'MagiBot - Verified bot' },
  976. { key: 129001800, label: 'SemrushBotSwa - Verified bot' },
  977. { key: 129039472, label: 'PingPing - Verified bot' },
  978. { key: 129042485, label: 'Chrome-Lighthouse - Verified bot' },
  979. { key: 129139413, label: 'Bing Preview - Verified bot' },
  980. { key: 129174907, label: 'All Africa Crawler - Verified bot' },
  981. { key: 129193049, label: 'Clickagy - Verified bot' },
  982. { key: 129222642, label: 'Google AdSense - Verified bot' },
  983. { key: 129237910, label: 'Easydns - Verified bot' },
  984. { key: 129242183, label: 'Spark Shipping - Verified bot' },
  985. { key: 129267794, label: 'YahooCacheSystem - Verified bot' },
  986. { key: 129280350, label: 'WP Time Capsule - Verified bot' },
  987. { key: 129294776, label: 'Moz dotbot - Verified bot' },
  988. { key: 129331960, label: "Grafana's Synthetic Monitoring - Verified bot" },
  989. { key: 129454250, label: 'Cloudflare SpeedTest - Verified bot' },
  990. { key: 129454721, label: 'Yext Inc - Verified bot' },
  991. { key: 129466116, label: 'GuestpostsBot - Verified bot' },
  992. { key: 129475873, label: 'Cliqzbot - Verified bot' },
  993. { key: 129495039, label: 'Integromat - Verified bot' },
  994. { key: 129513517, label: 'Automaton - Verified bot' },
  995. { key: 129581407, label: 'marketgoo - Verified bot' },
  996. { key: 129607366, label: 'Worldline Bot - Verified bot' },
  997. { key: 129611777, label: 'New York Times Newsgathering - Verified bot' },
  998. { key: 129612877, label: 'seo4ajax - Verified bot' },
  999. { key: 129641572, label: 'SemrushBotBacklinkAudit - Verified bot' },
  1000. { key: 129654414, label: 'OnlineOrNot Monitor - Verified bot' },
  1001. { key: 129654981, label: 'OCLC HZEP - Verified bot' },
  1002. { key: 129660880, label: 'Cloudflare Prefetch - Verified bot' },
  1003. { key: 129769712, label: 'Broadcom - Verified bot' },
  1004. { key: 129802398, label: 'Cloudflare-Traffic-Manager - Verified bot' },
  1005. { key: 129862394, label: 'BestChange Bot - Verified bot' },
  1006. { key: 129886495, label: 'Entura - Verified bot' },
  1007. { key: 129965421, label: 'elmah.io Uptime Monitoring - Verified bot' },
  1008. { key: 130197178, label: 'ChargeBee - Verified bot' },
  1009. { key: 130198712, label: 'Mavifinds Bot - Verified bot' },
  1010. { key: 130208907, label: 'Feedly - Verified bot' },
  1011. { key: 130229353, label: 'Cookie Hub - Verified bot' },
  1012. { key: 130276870, label: 'twitterbot - Verified bot' },
  1013. { key: 130295907, label: 'MJ12Bot - Verified bot' },
  1014. { key: 130339380, label: 'EvoUptimeBot - Verified bot' },
  1015. { key: 130369677, label: 'SlackbotLinkExpanding - Verified bot' },
  1016. { key: 130414766, label: 'Link Tiger - Verified bot' },
  1017. { key: 130422470, label: 'WordPress - Verified bot' },
  1018. { key: 130489566, label: 'Feeder - Verified bot' },
  1019. { key: 130507404, label: 'MagnetmeBot - Verified bot' },
  1020. { key: 130565225, label: 'Crazy Egg Bot - Verified bot' },
  1021. { key: 130590373, label: 'AdsTxtCrawler - Verified bot' },
  1022. { key: 130676123, label: 'GoPay - Verified bot' },
  1023. { key: 130694769, label: 'LinkCheck - Verified bot' },
  1024. { key: 130749388, label: 'MainWP - Verified bot' },
  1025. { key: 130800099, label: 'W3 Validator Services - Verified bot' },
  1026. { key: 130806650, label: 'HetrixTools - Verified bot' },
  1027. { key: 130858221, label: 'cron-job.org - Verified bot' },
  1028. { key: 130907812, label: 'Taboola - Verified bot' },
  1029. { key: 130928282, label: 'Echobot Bot - Verified bot' },
  1030. { key: 131007707, label: 'SiteLock - Verified bot' },
  1031. { key: 131044722, label: 'Adagio Bot - Verified bot' },
  1032. { key: 131070921, label: 'Accessible Web Bot - Verified bot' },
  1033. { key: 131112457, label: 'DigiCert DCV - Verified bot' },
  1034. { key: 131158780, label: 'Audisto Crawler - Verified bot' },
  1035. { key: 131170744, label: 'Iframely - Verified bot' },
  1036. { key: 131172028, label: 'jobswithgptcom-bot - Verified bot' },
  1037. { key: 131190766, label: 'Internet Archive - Verified bot' },
  1038. { key: 131213663, label: 'Wordpress Namecheap - Verified bot' },
  1039. { key: 131231981, label: 'Area 360 - Verified bot' },
  1040. { key: 131269617, label: 'Skype - Verified bot' },
  1041. { key: 131340380, label: 'GoogleOther - Verified bot' },
  1042. { key: 131342054, label: 'WMF Citoid - Verified bot' },
  1043. { key: 131351453, label: 'Overcast - Verified bot' },
  1044. { key: 131383301, label: 'Library Of Congress Web Archiving - Verified bot' },
  1045. { key: 131394912, label: '2checkout - Verified bot' },
  1046. { key: 131416283, label: 'upday - Verified bot' },
  1047. { key: 131520839, label: 'Slack Image Proxy - Verified bot' },
  1048. { key: 131560112, label: 'iboss - Verified bot' },
  1049. { key: 131587288, label: 'Sentry - Verified bot' },
  1050. { key: 131600359, label: 'Level9SearchBot - Verified bot' },
  1051. { key: 131650187, label: 'Watchbot - Verified bot' },
  1052. { key: 131792310, label: 'Yahoo Japan - Verified bot' },
  1053. { key: 131847989, label: 'Metorik - Verified bot' },
  1054. { key: 131858776, label: 'WordPress.com - Verified bot' },
  1055. { key: 131889006, label: 'LeikiBot - Verified bot' },
  1056. { key: 131938841, label: 'CriteoBot - Verified bot' },
  1057. { key: 131970934, label: 'ZumBot - Verified bot' },
  1058. { key: 131993364, label: 'YahooMailProxy - Verified bot' },
  1059. { key: 131996873, label: 'Sansec Security Monitor - Verified bot' },
  1060. { key: 132012747, label: 'eMoney Advisor - Verified bot' },
  1061. { key: 132044941, label: 'Cloudflare Healthchecks - Verified bot' },
  1062. { key: 132048985, label: 'WormlyBot - Verified bot' },
  1063. { key: 132063225, label: 'MontasticMonitor - Verified bot' },
  1064. { key: 132124516, label: 'Yahoo Ad Monitoring - Verified bot' },
  1065. { key: 132164824, label: 'Baidu - Verified bot' },
  1066. { key: 132200936, label: 'QualifiedBot - Verified bot' },
  1067. { key: 132270384, label: 'Moz rogerbot - Verified bot' },
  1068. { key: 132282713, label: 'IFTTT RSS Feed Service - Verified bot' },
  1069. { key: 132301583, label: 'eRepublik.tools - Verified bot' },
  1070. { key: 132355084, label: 'MRGbot - Verified bot' },
  1071. { key: 132364910, label: 'SemrushBotSI - Verified bot' },
  1072. { key: 132445392, label: 'WebsitePulseBot - Verified bot' },
  1073. { key: 132486269, label: 'AfterShip Magento 2 Connector - Verified bot' },
  1074. { key: 132552623, label: 'DuckDuckBot - Verified bot' },
  1075. { key: 132580853, label: 'DataForSEO Bot - Verified bot' },
  1076. { key: 132602293, label: 'Seekport - Verified bot' },
  1077. { key: 132668446, label: 'Scour RSS Bot - Verified bot' },
  1078. { key: 132733866, label: 'Splunk Synthetics - Verified bot' },
  1079. { key: 132764802, label: 'Siteimprove Crawl - Verified bot' },
  1080. { key: 132784499, label: 'IsDownBot - Verified bot' },
  1081. { key: 132792628, label: 'Amazon Kendra - Verified bot' },
  1082. { key: 132794715, label: 'Mars Finder - Verified bot' },
  1083. { key: 132803734, label: 'NitroBot - Verified bot' },
  1084. { key: 132896626, label: 'Clerk Webhook - Verified bot' },
  1085. { key: 132918581, label: 'MotoMinerBot - Verified bot' },
  1086. { key: 132938853, label: 'SemrushBotBacklinks - Verified bot' },
  1087. { key: 132941654, label: 'SolarWinds Observability - Verified bot' },
  1088. { key: 132960752, label: 'Zscaler - Verified bot' },
  1089. { key: 132995013, label: 'ChatGPT-User - Verified bot' },
  1090. { key: 132999486, label: 'Trellis-Services - Verified bot' },
  1091. { key: 133013330, label: 'Critical CSS Bot - Verified bot' },
  1092. { key: 133035600, label: 'Amazon Contxbot - Verified bot' },
  1093. { key: 133050960, label: 'Botify - Verified bot' },
  1094. { key: 133111982, label: 'Cludo - Verified bot' },
  1095. { key: 133142241, label: 'BoardGamePrices Bot - Verified bot' },
  1096. { key: 133200485, label: 'MgidBot - Verified bot' },
  1097. { key: 133301927, label: 'Ghost Inspector - Verified bot' },
  1098. { key: 133352613, label: 'FlipboardRSS - Verified bot' },
  1099. { key: 133356397, label: 'Trendiction Bot - Verified bot' },
  1100. { key: 133378755, label: 'FlipboardProxy - Verified bot' },
  1101. { key: 133475166, label: 'Netumo - Verified bot' },
  1102. { key: 133492770, label: 'Automate.io Bot - Verified bot' },
  1103. { key: 133506661, label: 'Proofpoint - Verified bot' },
  1104. { key: 133562956, label: 'Google Image Proxy - Verified bot' },
  1105. { key: 133608144, label: 'Adyen - Verified bot' },
  1106. { key: 133621792, label: 'CCBot - Verified bot' },
  1107. { key: 133651824, label: 'InternetArchiveBot - Verified bot' },
  1108. { key: 133654704, label: 'Pingdom - Verified bot' },
  1109. { key: 133661282, label: 'Cxense - Verified bot' },
  1110. { key: 133671294, label: 'Slackbot - Verified bot' },
  1111. { key: 133672756, label: 'Google Feed Fetcher - Verified bot' },
  1112. { key: 133722337, label: 'Missinglettr Bot - Verified bot' },
  1113. { key: 133730073, label: 'Google-CloudVertexBot - Verified bot' },
  1114. { key: 133808157, label: 'TTD Content - Verified bot' },
  1115. { key: 133827886, label: 'discordBot - Verified bot' },
  1116. { key: 133841045, label: 'Groovinads - Verified bot' },
  1117. { key: 133864585, label: 'Cloudflare SSLDetector - Verified bot' },
  1118. { key: 133933265, label: 'AhrefsBot - Verified bot' },
  1119. { key: 134002463, label: 'Google Read Aloud - Verified bot' },
  1120. { key: 134090376, label: 'klaviyo - Verified bot' },
  1121. { key: 134091823, label: 'OnCrawl - Verified bot' },
  1122. { key: 134096637, label: 'Google-Adwords-Instant - Verified bot' },
  1123. { key: 134112289, label: 'Cloudflare Validator - Verified bot' },
  1124. { key: 134122456, label: 'Google StoreBot - Verified bot' },
  1125. { key: 134131089, label: 'Authory - Verified bot' },
  1126. { key: 134177909, label: 'Uptimia - Verified bot' },
  1127. { key: 134192977, label: 'Project Honeypot - Verified bot' },
  1128. { key: 151051910, label: 'Unclassified bot - TLS Signature' },
  1129. { key: 151571662, label: 'Abnormal request - Incorrect Browser Headers' },
  1130. { key: 151790139, label: 'Golang - TLS Signature' },
  1131. { key: 151935671, label: 'Scraping bot - TLS Signature' },
  1132. { key: 152295520, label: 'node - TLS Signature' },
  1133. { key: 152888627, label: 'Python - TLS Signature' },
  1134. { key: 153208682, label: 'Java - TLS Signature' },
  1135. { key: 153620563, label: 'Scraping bot - TLS Signature' },
  1136. { key: 153813573, label: 'Scraping bot - TLS Signature' },
  1137. { key: 154330752, label: 'Vulnerability scanner - TLS Signature' },
  1138. { key: 154357709, label: 'DoS Tool - TLS Signature' },
  1139. { key: 154449703, label: 'Scraping bot - User-agent' },
  1140. { key: 154920374, label: 'Unclassified bot - TLS Signature' },
  1141. { key: 155403339, label: 'AI Bot - User-agent' },
  1142. { key: 155580801, label: 'Golang - TLS Signature' },
  1143. { key: 156711944, label: 'Python - TLS Signature' },
  1144. { key: 157468811, label: 'DoS Tool - TLS Signature' },
  1145. { key: 157718770, label: 'Scraping bot - TLS Signature' },
  1146. { key: 158072645, label: 'DoS Tool - TLS Signature' },
  1147. { key: 158082839, label: 'Scraping bot - TLS Signature' },
  1148. { key: 159364814, label: 'Scraping bot - TLS Signature' },
  1149. { key: 159600225, label: 'Python - TLS Signature' },
  1150. { key: 160352931, label: 'Ruby - TLS Signature' },
  1151. { key: 160454973, label: 'Golang - TLS Signature' },
  1152. { key: 160901235, label: 'Unclassified bot - TLS Signature' },
  1153. { key: 160956963, label: 'Ruby - TLS Signature' },
  1154. { key: 161794528, label: 'Scraping bot - TLS Signature' },
  1155. { key: 162007718, label: 'Java - TLS Signature' },
  1156. { key: 162073760, label: 'cURL - TLS Signature' },
  1157. { key: 162118083, label: 'Python - TLS Signature' },
  1158. { key: 162444022, label: 'Python - TLS Signature' },
  1159. { key: 162587232, label: 'Workers Browser - Cloudflare Service' },
  1160. { key: 162739949, label: 'Scraping bot - TLS Signature' },
  1161. { key: 162742967, label: 'Golang - TLS Signature' },
  1162. { key: 162961728, label: 'ATO Bot - TLS Signature' },
  1163. { key: 163028021, label: 'Scraping bot - TLS Signature' },
  1164. { key: 163305579, label: 'Java - TLS Signature' },
  1165. { key: 163338236, label: 'Golang - TLS Signature' },
  1166. { key: 163372860, label: 'Unclassified bot - TLS Signature' },
  1167. { key: 164080006, label: 'Scraping bot - TLS Signature' },
  1168. { key: 164127939, label: 'php - TLS Signature' },
  1169. { key: 164436501, label: 'Golang - TLS Signature' },
  1170. { key: 164610470, label: 'cURL - TLS Signature' },
  1171. { key: 164625698, label: 'Scraping bot - TLS Signature' },
  1172. { key: 165102111, label: 'Python - TLS Signature' },
  1173. { key: 165348117, label: 'Golang - TLS Signature' },
  1174. { key: 166185009, label: 'DoS Tool - TLS Signature' },
  1175. { key: 167139453, label: 'Golang - TLS Signature' },
  1176. { key: 201326592, label: 'Login Failure Anomaly' },
  1177. { key: 201326593, label: 'Login Attempt Anomaly' },
  1178. { key: 201326598, label: 'Login Failure Anomaly' },
  1179. { key: 201326599, label: 'Login Attempt Anomaly' },
  1180. ]
  1181. // 洲/大陆
  1182. export const CONTINENTS = [
  1183. {
  1184. key: 'AF',
  1185. label: 'Africa',
  1186. },
  1187. {
  1188. key: 'AN',
  1189. label: 'Antarctica',
  1190. },
  1191. {
  1192. key: 'AS',
  1193. label: 'Asia',
  1194. },
  1195. {
  1196. key: 'EU',
  1197. label: 'Europe',
  1198. },
  1199. {
  1200. key: 'NA',
  1201. label: 'North America',
  1202. },
  1203. {
  1204. key: 'OC',
  1205. label: 'Oceania',
  1206. },
  1207. {
  1208. key: 'SA',
  1209. label: 'South America',
  1210. },
  1211. {
  1212. key: 'T1',
  1213. label: 'Tor',
  1214. },
  1215. ]
  1216. // 请求方法
  1217. export const REQUEST_METHODS = [
  1218. {
  1219. key: 'GET',
  1220. label: 'GET',
  1221. },
  1222. {
  1223. key: 'POST',
  1224. label: 'POST',
  1225. },
  1226. {
  1227. key: 'PURGE',
  1228. label: 'PURGE',
  1229. },
  1230. {
  1231. key: 'PUT',
  1232. label: 'PUT',
  1233. },
  1234. {
  1235. key: 'HEAD',
  1236. label: 'HEAD',
  1237. },
  1238. {
  1239. key: 'OPTIONS',
  1240. label: 'OPTIONS',
  1241. },
  1242. {
  1243. key: 'DELETE',
  1244. label: 'DELETE',
  1245. },
  1246. {
  1247. key: 'PATCH',
  1248. label: 'PATCH',
  1249. },
  1250. ]
  1251. export const HTTP_VERSIONS = [
  1252. {
  1253. key: 'HTTP/1.0',
  1254. label: 'HTTP/1.0',
  1255. },
  1256. {
  1257. key: 'HTTP/1.1',
  1258. label: 'HTTP/1.1',
  1259. },
  1260. {
  1261. key: 'HTTP/1.2',
  1262. label: 'HTTP/1.2',
  1263. },
  1264. {
  1265. key: 'HTTP/2',
  1266. label: 'HTTP/2',
  1267. },
  1268. {
  1269. key: 'HTTP/3',
  1270. label: 'HTTP/3',
  1271. },
  1272. {
  1273. key: 'SPDY/3.1',
  1274. label: 'SPDY/3.1',
  1275. },
  1276. ]
  1277. const BOT_CATEGORIES = [
  1278. {
  1279. key: 'Search Engine Crawler',
  1280. label: i18n.t('network.waf.category.search_engine_crawler'),
  1281. },
  1282. {
  1283. key: 'Search Engine Optimization',
  1284. label: i18n.t('network.waf.category.search_engine_optimization'),
  1285. },
  1286. {
  1287. key: 'Monitoring & Analytics',
  1288. label: i18n.t('network.waf.category.monitoring_analytics'),
  1289. },
  1290. {
  1291. key: 'Advertising & Marketing',
  1292. label: i18n.t('network.waf.category.advertising_marketing'),
  1293. },
  1294. {
  1295. key: 'Page Preview',
  1296. label: i18n.t('network.waf.category.page_preview'),
  1297. },
  1298. {
  1299. key: 'Security',
  1300. label: i18n.t('network.waf.category.security'),
  1301. },
  1302. {
  1303. key: 'Accessibility',
  1304. label: i18n.t('network.waf.category.accessibility'),
  1305. },
  1306. {
  1307. key: 'Webhooks',
  1308. label: i18n.t('network.waf.category.webhooks'),
  1309. },
  1310. {
  1311. key: 'Feed Fetcher',
  1312. label: i18n.t('network.waf.category.feed_fetcher'),
  1313. },
  1314. {
  1315. key: 'AI Crawler',
  1316. label: i18n.t('network.waf.category.ai_crawler'),
  1317. },
  1318. {
  1319. key: 'Aggregator',
  1320. label: i18n.t('network.waf.category.aggregator'),
  1321. },
  1322. {
  1323. key: 'AI Assistant',
  1324. label: i18n.t('network.waf.category.ai_assistant'),
  1325. },
  1326. {
  1327. key: 'AI Search',
  1328. label: i18n.t('network.waf.category.ai_search'),
  1329. },
  1330. {
  1331. key: 'Archiver',
  1332. label: i18n.t('network.waf.category.archiver'),
  1333. },
  1334. {
  1335. key: 'Other',
  1336. label: i18n.t('network.waf.category.other'),
  1337. },
  1338. ]
  1339. const IP_VALUE_LIST = [
  1340. {
  1341. key: 'cf.anonymizer',
  1342. label: i18n.t('network.waf.ip_src.cf_anonymizer'),
  1343. },
  1344. {
  1345. key: 'cf.botnetcc',
  1346. label: i18n.t('network.waf.ip_src.cf_botnetcc'),
  1347. },
  1348. {
  1349. key: 'cf.malware',
  1350. label: i18n.t('network.waf.ip_src.cf_malware'),
  1351. },
  1352. {
  1353. key: 'cf.open_proxies',
  1354. label: i18n.t('network.waf.ip_src.cf_open_proxies'),
  1355. },
  1356. {
  1357. key: 'cf.vpn',
  1358. label: i18n.t('network.waf.ip_src.cf_vpn'),
  1359. },
  1360. ]
  1361. const strOpts = ['wildcard', 'strict_wildcard', 'eq', 'ne', 'contains', 'not_contains', 'matches', 'not_matches', 'starts_with', 'not_starts_with', 'ends_with', 'not_ends_with']
  1362. // 规则列表配置
  1363. export const WAF_RULE_TYPES = [
  1364. {
  1365. type: 'http.request.full_uri',
  1366. opts: strOpts,
  1367. isShowName: false,
  1368. valueType: 'input',
  1369. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1370. valueExtra: (type, opt) => {
  1371. if (opt === 'wildcard') return 'https://*.example.com/files/*'
  1372. if (opt === 'strict_wildcard') return 'https://*.example.com/Files/*'
  1373. if (['matches', 'not_matches'].includes(opt)) return 'https://test.com/docs/0[7-8]/$'
  1374. return 'https://example.com/contact?page=1234'
  1375. },
  1376. },
  1377. {
  1378. type: 'http.request.uri',
  1379. opts: strOpts,
  1380. isShowName: false,
  1381. valueType: 'input',
  1382. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1383. valueExtra: (type, opt) => {
  1384. if (opt === 'wildcard') return '/content/*?page=1234'
  1385. if (opt === 'strict_wildcard') return '/*/content?page=1234'
  1386. if (['matches', 'not_matches'].includes(opt)) return '?count=[0-9]'
  1387. return '/content?page=1234'
  1388. },
  1389. },
  1390. {
  1391. type: 'http.request.uri.path',
  1392. opts: ['wildcard', 'strict_wildcard', 'eq', 'ne', 'contains', 'not_contains', 'matches', 'not_matches', 'starts_with', 'not_starts_with', 'ends_with', 'not_ends_with', 'in', 'not_in'],
  1393. isShowName: false,
  1394. valueType: (opt) => {
  1395. if (opt === 'in' || opt === 'not_in') {
  1396. return 'multi-select'
  1397. }
  1398. return 'input'
  1399. },
  1400. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1401. valueExtra: (type, opt) => {
  1402. if (opt === 'wildcard') return '/content/*'
  1403. if (opt === 'strict_wildcard') return '/*/content'
  1404. if (['matches', 'not_matches'].includes(opt)) return '^/articles/200[7-8]/'
  1405. return '/content'
  1406. },
  1407. },
  1408. {
  1409. type: 'http.request.uri.query',
  1410. opts: strOpts,
  1411. isShowName: false,
  1412. valueType: 'input',
  1413. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1414. valueExtra: (type, opt) => {
  1415. if (opt === 'wildcard') return 'page=1234*'
  1416. if (opt === 'strict_wildcard') return 'page=*'
  1417. if (['matches', 'not_matches'].includes(opt)) return 'page=[0-9]'
  1418. return 'page=1234'
  1419. },
  1420. },
  1421. {
  1422. type: 'ip.src.asnum',
  1423. opts: ['eq', 'ne', 'gt', 'lt', 'ge', 'le', 'in', 'not_in'],
  1424. isShowName: false,
  1425. valueType: (opt) => {
  1426. if (opt === 'in' || opt === 'not_in') {
  1427. return 'multi-select'
  1428. }
  1429. return 'input-number'
  1430. },
  1431. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1432. valueExtra: (type, opt) => '13335',
  1433. },
  1434. {
  1435. type: 'http.cookie',
  1436. opts: strOpts,
  1437. isShowName: false,
  1438. valueType: 'input',
  1439. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1440. valueExtra: (type, opt) => {
  1441. if (opt === 'wildcard') return 'name=val*'
  1442. if (['matches', 'not_matches'].includes(opt)) return '_authverify=.*[0-5][4]'
  1443. return 'name = value'
  1444. },
  1445. },
  1446. {
  1447. type: 'ip.src.country',
  1448. opts: ['eq', 'ne', 'in', 'not_in'],
  1449. isShowName: false,
  1450. valueType: (opt) => {
  1451. if (opt === 'in' || opt === 'not_in') {
  1452. return 'multi-select'
  1453. }
  1454. return 'single-select'
  1455. },
  1456. valueOpts: COUNTRYS,
  1457. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1458. },
  1459. {
  1460. type: 'ip.src.continent',
  1461. opts: ['eq', 'ne', 'in', 'not_in'],
  1462. isShowName: false,
  1463. valueType: (opt) => {
  1464. if (opt === 'in' || opt === 'not_in') {
  1465. return 'multi-select'
  1466. }
  1467. return 'single-select'
  1468. },
  1469. valueOpts: CONTINENTS,
  1470. belongs: ['custom', 'rate_limit', 'managed', 'ratelimit_custom'],
  1471. },
  1472. {
  1473. type: 'http.host',
  1474. opts: ['wildcard', 'strict_wildcard', 'eq', 'ne', 'contains', 'not_contains', 'matches', 'not_matches', 'starts_with', 'not_starts_with', 'ends_with', 'not_ends_with', 'in', 'not_in'],
  1475. isShowName: false,
  1476. valueType: (opt) => {
  1477. if (opt === 'in' || opt === 'not_in') {
  1478. return 'multi-select'
  1479. }
  1480. return 'input'
  1481. },
  1482. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1483. valueExtra: (type, opt) => {
  1484. if (opt === 'wildcard' || opt === 'strict_wildcard') return 'example.com*'
  1485. if (['matches', 'not_matches'].includes(opt)) return '(www.|blog.)test.com'
  1486. return 'example.com'
  1487. },
  1488. },
  1489. {
  1490. type: 'ip.src',
  1491. opts: ['eq', 'ne', 'in', 'not_in', 'in_list', 'not_in_list'],
  1492. isShowName: false,
  1493. valueType: (opt) => {
  1494. if (opt === 'eq' || opt === 'ne') {
  1495. return 'input'
  1496. }
  1497. if (opt === 'in' || opt === 'not_in') {
  1498. return 'multi-select'
  1499. }
  1500. return 'single-select'
  1501. },
  1502. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1503. valueOpts: (valueType) => {
  1504. if (valueType === 'multi-select') {
  1505. return []
  1506. }
  1507. return IP_VALUE_LIST
  1508. },
  1509. valueExtra: '192.0.0.1',
  1510. },
  1511. {
  1512. type: 'http.referer',
  1513. opts: strOpts,
  1514. isShowName: false,
  1515. valueType: 'input',
  1516. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1517. valueExtra: (type, opt) => {
  1518. if (opt === 'wildcard') return '^http://test.com/page/*/(.*)'
  1519. if (opt === 'matches') return '^http://test.com/page/(.*)'
  1520. if (opt === 'not_matches') return '^http://test.com/*/page/(.*)'
  1521. return 'example.com'
  1522. },
  1523. },
  1524. {
  1525. type: 'http.request.method',
  1526. opts: ['eq', 'ne', 'in', 'not_in'],
  1527. isShowName: false,
  1528. valueType: (opt) => {
  1529. if (opt === 'in' || opt === 'not_in') {
  1530. return 'multi-select'
  1531. }
  1532. return 'single-select'
  1533. },
  1534. valueOpts: REQUEST_METHODS,
  1535. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1536. valueExtra: 'GET',
  1537. },
  1538. {
  1539. type: 'ssl',
  1540. opts: ['eq'],
  1541. optDisabled: true,
  1542. isShowName: false,
  1543. valueType: 'switch',
  1544. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1545. },
  1546. {
  1547. type: 'http.request.version',
  1548. opts: ['eq', 'ne', 'in', 'not_in'],
  1549. isShowName: false,
  1550. valueType: (opt) => {
  1551. if (opt === 'in' || opt === 'not_in') {
  1552. return 'multi-select'
  1553. }
  1554. return 'single-select'
  1555. },
  1556. valueOpts: HTTP_VERSIONS,
  1557. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1558. },
  1559. {
  1560. type: 'http.user_agent',
  1561. opts: strOpts,
  1562. isShowName: false,
  1563. valueType: 'input',
  1564. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1565. valueExtra: (type, opt) => {
  1566. if (opt === 'wildcard' || opt === 'strict_wildcard') return 'Mozilla/* (Macintosh; Intel Mac OS X 10_15_7) ...'
  1567. if (opt === 'matches' || opt === 'not_matches') return '.*MSIE [8-9].*'
  1568. return 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) ...'
  1569. },
  1570. },
  1571. {
  1572. type: 'http.x_forwarded_for',
  1573. opts: strOpts,
  1574. isShowName: false,
  1575. valueType: 'input',
  1576. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1577. valueExtra: (type, opt) => {
  1578. if (opt === 'wildcard' || opt === 'strict_wildcard') return '192.0.*, 192.1.*'
  1579. return '192.0.0.1, 192.1.0.1'
  1580. },
  1581. },
  1582. {
  1583. type: 'cf.tls_client_auth.cert_verified',
  1584. opts: ['eq'],
  1585. optDisabled: true,
  1586. isShowName: false,
  1587. valueType: 'switch',
  1588. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1589. },
  1590. {
  1591. type: 'cf.fraud_detection.disposable_email',
  1592. opts: ['eq'],
  1593. optDisabled: true,
  1594. isShowName: false,
  1595. valueType: 'switch',
  1596. belongs: ['custom', 'managed'],
  1597. },
  1598. {
  1599. type: 'cf.client.bot',
  1600. opts: ['eq'],
  1601. optDisabled: true,
  1602. isShowName: false,
  1603. valueType: 'switch',
  1604. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1605. },
  1606. {
  1607. type: 'cf.bot_management.verified_bot',
  1608. opts: ['eq'],
  1609. optDisabled: true,
  1610. isShowName: false,
  1611. valueType: 'switch',
  1612. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1613. },
  1614. {
  1615. type: 'cf.verified_bot_category',
  1616. opts: ['eq', 'ne', 'in', 'not_in'],
  1617. isShowName: false,
  1618. valueType: (opt) => {
  1619. if (opt === 'in' || opt === 'not_in') {
  1620. return 'multi-select'
  1621. }
  1622. return 'single-select'
  1623. },
  1624. valueOpts: BOT_CATEGORIES,
  1625. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1626. },
  1627. {
  1628. type: 'cf.bot_management.score',
  1629. opts: ['eq', 'ne', 'gt', 'lt', 'ge', 'le', 'in', 'not_in'],
  1630. isShowName: false,
  1631. valueType: (opt) => {
  1632. if (opt === 'in' || opt === 'not_in') {
  1633. return 'multi-select'
  1634. }
  1635. return 'input-number'
  1636. },
  1637. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1638. valueExtra: '1-99',
  1639. props: (type, opt) => {
  1640. if (!['in', 'not_in'].includes(opt)) {
  1641. return {
  1642. min: 1,
  1643. max: 99,
  1644. step: 1,
  1645. precision: 0,
  1646. }
  1647. }
  1648. return {}
  1649. },
  1650. },
  1651. {
  1652. type: 'cf.bot_management.static_resource',
  1653. opts: ['eq'],
  1654. isShowName: false,
  1655. valueType: 'switch',
  1656. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1657. },
  1658. {
  1659. type: 'cf.bot_management.js_detection.passed',
  1660. opts: ['eq'],
  1661. isShowName: false,
  1662. valueType: 'switch',
  1663. belongs: ['custom', 'ratelimit_custom', 'managed'],
  1664. },
  1665. {
  1666. type: 'cf.bot_management.ja3_hash',
  1667. opts: ['eq', 'ne', 'in', 'not_in'],
  1668. isShowName: false,
  1669. valueType: (opt) => {
  1670. if (opt === 'in' || opt === 'not_in') {
  1671. return 'multi-select'
  1672. }
  1673. return 'input'
  1674. },
  1675. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1676. valueExtra: 'df669e7ea913f1ac0c0cce9ac201a2ec1',
  1677. },
  1678. {
  1679. type: 'cf.bot_management.ja4',
  1680. opts: ['eq', 'ne', 'in', 'not_in'],
  1681. isShowName: false,
  1682. valueType: (opt) => {
  1683. if (opt === 'in' || opt === 'not_in') {
  1684. return 'multi-select'
  1685. }
  1686. return 'input'
  1687. },
  1688. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1689. valueExtra: 't13d1516h2_8daaf6152771_b186095e22b6 ',
  1690. },
  1691. {
  1692. type: 'cf.bot_management.corporate_proxy',
  1693. opts: ['eq'],
  1694. isShowName: false,
  1695. valueType: 'switch',
  1696. belongs: ['custom', 'managed'],
  1697. },
  1698. {
  1699. type: 'cf.bot_management.detection_ids',
  1700. opts: ['eq', 'ne', 'in', 'not_in'],
  1701. isShowName: false,
  1702. valueType: (opt) => {
  1703. if (opt === 'in' || opt === 'not_in') {
  1704. return 'multi-select'
  1705. }
  1706. return 'single-select'
  1707. },
  1708. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1709. valueOpts: IDS.map(item => ({ key: item.key, label: `${item.key} (${item.label})` })),
  1710. },
  1711. {
  1712. type: 'ip.src.is_in_european_union',
  1713. opts: ['eq'],
  1714. isShowName: false,
  1715. valueType: 'switch',
  1716. belongs: ['custom'],
  1717. },
  1718. {
  1719. type: 'cf.waf.score.sqli',
  1720. opts: ['eq', 'ne', 'gt', 'lt', 'ge', 'le', 'in', 'not_in'],
  1721. isShowName: false,
  1722. valueType: (opt) => {
  1723. if (opt === 'in' || opt === 'not_in') {
  1724. return 'multi-select'
  1725. }
  1726. return 'input-number'
  1727. },
  1728. belongs: ['custom', 'rate_limit', 'ratelimit_custom'],
  1729. valueExtra: '5',
  1730. props: (type, opt) => {
  1731. if (!['in', 'not_in'].includes(opt)) {
  1732. return {
  1733. min: 1,
  1734. }
  1735. }
  1736. return {}
  1737. },
  1738. },
  1739. {
  1740. type: 'cf.waf.score.xss',
  1741. opts: ['eq', 'ne', 'gt', 'lt', 'ge', 'le', 'in', 'not_in'],
  1742. isShowName: false,
  1743. valueType: (opt) => {
  1744. if (opt === 'in' || opt === 'not_in') {
  1745. return 'multi-select'
  1746. }
  1747. return 'input-number'
  1748. },
  1749. belongs: ['custom', 'rate_limit', 'ratelimit_custom'],
  1750. valueExtra: '5',
  1751. props: (type, opt) => {
  1752. if (!['in', 'not_in'].includes(opt)) {
  1753. return {
  1754. min: 1,
  1755. }
  1756. }
  1757. return {}
  1758. },
  1759. },
  1760. {
  1761. type: 'cf.waf.score.rce',
  1762. opts: ['eq', 'ne', 'gt', 'lt', 'ge', 'le', 'in', 'not_in'],
  1763. isShowName: false,
  1764. valueType: (opt) => {
  1765. if (opt === 'in' || opt === 'not_in') {
  1766. return 'multi-select'
  1767. }
  1768. return 'input-number'
  1769. },
  1770. belongs: ['custom', 'rate_limit', 'ratelimit_custom'],
  1771. valueExtra: '5',
  1772. props: (type, opt) => {
  1773. if (!['in', 'not_in'].includes(opt)) {
  1774. return {
  1775. min: 1,
  1776. }
  1777. }
  1778. return {}
  1779. },
  1780. },
  1781. {
  1782. type: 'cf.waf.score',
  1783. opts: ['eq', 'ne', 'gt', 'lt', 'ge', 'le', 'in', 'not_in'],
  1784. isShowName: false,
  1785. valueType: (opt) => {
  1786. if (opt === 'in' || opt === 'not_in') {
  1787. return 'multi-select'
  1788. }
  1789. return 'input-number'
  1790. },
  1791. belongs: ['custom', 'rate_limit', 'ratelimit_custom'],
  1792. valueExtra: '5',
  1793. props: (type, opt) => {
  1794. if (!['in', 'not_in'].includes(opt)) {
  1795. return {
  1796. min: 1,
  1797. }
  1798. }
  1799. return {}
  1800. },
  1801. },
  1802. {
  1803. type: 'http.request.body.raw',
  1804. opts: ['eq', 'ne', 'contains', 'not_contains', 'matches', 'not_matches', 'starts_with', 'not_starts_with', 'ends_with', 'not_ends_with'],
  1805. isShowName: false,
  1806. valueType: 'input',
  1807. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1808. },
  1809. {
  1810. type: 'http.request.body.size',
  1811. opts: ['eq', 'ne', 'gt', 'lt', 'ge', 'le', 'in', 'not_in'],
  1812. isShowName: false,
  1813. valueType: (opt) => {
  1814. if (opt === 'in' || opt === 'not_in') {
  1815. return 'multi-select'
  1816. }
  1817. return 'input-number'
  1818. },
  1819. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1820. valueExtra: '10000(in bytes)',
  1821. },
  1822. {
  1823. type: 'lookup_json_string',
  1824. opts: ['eq', 'ne', 'contains', 'not_contains', 'matches', 'not_matches', 'starts_with', 'not_starts_with', 'ends_with', 'not_ends_with', 'in', 'not_in'],
  1825. isShowName: true,
  1826. valueType: (opt) => {
  1827. if (opt === 'in' || opt === 'not_in') {
  1828. return 'multi-select'
  1829. }
  1830. return 'input'
  1831. },
  1832. belongs: ['custom', 'ratelimit_custom', 'managed'],
  1833. },
  1834. {
  1835. type: 'cf.waf.auth_cetected',
  1836. opts: ['eq'],
  1837. isShowName: false,
  1838. valueType: 'switch',
  1839. belongs: ['custom', 'rate_limit'],
  1840. },
  1841. {
  1842. type: 'cf.waf.credential_check.username_leaked',
  1843. opts: ['eq'],
  1844. isShowName: false,
  1845. valueType: 'switch',
  1846. belongs: ['custom', 'rate_limit'],
  1847. },
  1848. {
  1849. type: 'cf.waf.credential_check.username_password_similar',
  1850. opts: ['eq'],
  1851. isShowName: false,
  1852. valueType: 'switch',
  1853. belongs: ['custom', 'rate_limit'],
  1854. },
  1855. {
  1856. type: 'cf.waf.credential_check.username_and_password_leaked',
  1857. opts: ['eq'],
  1858. isShowName: false,
  1859. valueType: 'switch',
  1860. belongs: ['custom', 'rate_limit'],
  1861. },
  1862. {
  1863. type: 'http.request.body.mime',
  1864. opts: [...strOpts, 'in', 'not_in'],
  1865. isShowName: false,
  1866. valueType: (opt) => {
  1867. if (opt === 'in' || opt === 'not_in') {
  1868. return 'multi-select'
  1869. }
  1870. return 'input'
  1871. },
  1872. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1873. valueExtra: (type, opt) => {
  1874. if (opt === 'wildcard') return 'image/*'
  1875. return 'image/png'
  1876. },
  1877. },
  1878. {
  1879. type: 'http.request.headers',
  1880. opts: ['eq', 'ne', 'contains', 'not_contains', 'matches', 'not_matches', 'in', 'not_in', 'len', 'not_len'],
  1881. isShowName: (type, opt) => {
  1882. if (opt === 'len' || opt === 'not_len') {
  1883. return false
  1884. }
  1885. return true
  1886. },
  1887. valueType: (opt) => {
  1888. if (opt === 'in' || opt === 'not_in') {
  1889. return 'multi-select'
  1890. }
  1891. return 'input'
  1892. },
  1893. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1894. nameExtra: 'content-type',
  1895. },
  1896. {
  1897. type: 'http.request.cookies',
  1898. opts: ['eq', 'ne', 'contains', 'not_contains', 'matches', 'not_matches', 'in', 'not_in', 'len', 'not_len'],
  1899. isShowName: (type, opt) => {
  1900. if (opt === 'len' || opt === 'not_len') {
  1901. return false
  1902. }
  1903. return true
  1904. },
  1905. valueType: (opt) => {
  1906. if (opt === 'in' || opt === 'not_in') {
  1907. return 'multi-select'
  1908. }
  1909. return 'input'
  1910. },
  1911. belongs: ['custom', 'rate_limit', 'ratelimit_custom', 'managed'],
  1912. },
  1913. {
  1914. type: 'cf.waf.credential_check.password_leaked',
  1915. opts: ['eq'],
  1916. optDisabled: true,
  1917. isShowName: false,
  1918. valueType: 'switch',
  1919. belongs: ['custom', 'rate_limit'],
  1920. },
  1921. {
  1922. type: 'cf.api_gateway.fallthrough_detected',
  1923. opts: ['eq'],
  1924. optDisabled: true,
  1925. isShowName: false,
  1926. valueType: 'switch',
  1927. belongs: ['custom'],
  1928. },
  1929. {
  1930. type: 'http.response.headers',
  1931. opts: ['eq', 'ne', 'contains', 'not_contains', 'matches', 'not_matches', 'in', 'not_in', 'len', 'not_len'],
  1932. isShowName: (type, opt) => {
  1933. if (opt === 'len' || opt === 'not_len') {
  1934. return false
  1935. }
  1936. return true
  1937. },
  1938. valueType: (opt) => {
  1939. if (opt === 'in' || opt === 'not_in') {
  1940. return 'multi-select'
  1941. }
  1942. return 'input'
  1943. },
  1944. belongs: ['ratelimit_custom'],
  1945. },
  1946. {
  1947. type: 'http.response.code',
  1948. opts: ['eq', 'ne', 'gt', 'lt', 'ge', 'le', 'in', 'not_in'],
  1949. isShowName: false,
  1950. valueType: (opt) => {
  1951. if (opt === 'in' || opt === 'not_in') {
  1952. return 'multi-select'
  1953. }
  1954. return 'input-number'
  1955. },
  1956. belongs: ['ratelimit_custom'],
  1957. },
  1958. {
  1959. type: 'cf.threat_score',
  1960. opts: ['eq', 'ne', 'gt', 'lt', 'ge', 'le', 'in', 'not_in'],
  1961. isShowName: false,
  1962. valueType: (opt) => {
  1963. if (opt === 'in' || opt === 'not_in') {
  1964. return 'multi-select'
  1965. }
  1966. return 'input-number'
  1967. },
  1968. belongs: ['ratelimit_custom', 'managed'],
  1969. },
  1970. ]
  1971. // 速率限制规则
  1972. export const RATE_LIMIT_RULE_TYPES = [
  1973. {
  1974. type: 'http.request.headers',
  1975. valueType: 'input',
  1976. valueFormat: (type, value) => {
  1977. return `${type}["${value}"]`
  1978. },
  1979. decodeDescription: (str) => {
  1980. const reg = /^http\.request\.headers\["([^"]+)"\]$/
  1981. const match = str.match(reg)
  1982. if (match) {
  1983. return {
  1984. type: 'http.request.headers',
  1985. value: match[1],
  1986. }
  1987. }
  1988. return null
  1989. },
  1990. },
  1991. {
  1992. type: 'ip.src',
  1993. valueType: null,
  1994. valueFormat: (type, value) => {
  1995. return `${type}`
  1996. },
  1997. decodeDescription: (str) => {
  1998. if (str === 'ip.src') {
  1999. return {
  2000. type: 'ip.src',
  2001. value: undefined,
  2002. }
  2003. }
  2004. return null
  2005. },
  2006. },
  2007. {
  2008. type: 'cf.unique_visitor_id',
  2009. valueType: null,
  2010. valueFormat: (type, value) => {
  2011. return `${type}`
  2012. },
  2013. decodeDescription: (str) => {
  2014. if (str === 'cf.unique_visitor_id') {
  2015. return {
  2016. type: 'cf.unique_visitor_id',
  2017. value: undefined,
  2018. }
  2019. }
  2020. return null
  2021. },
  2022. },
  2023. {
  2024. type: 'http.request.cookies',
  2025. valueType: 'input',
  2026. valueFormat: (type, value) => {
  2027. return `${type}["${value}"]`
  2028. },
  2029. decodeDescription: (str) => {
  2030. const reg = /^http\.request\.cookies\["([^"]+)"\]$/
  2031. const match = str.match(reg)
  2032. if (match) {
  2033. return {
  2034. type: 'http.request.cookies',
  2035. value: match[1],
  2036. }
  2037. }
  2038. return null
  2039. },
  2040. },
  2041. {
  2042. type: 'http.request.uri.args',
  2043. valueType: 'input',
  2044. valueFormat: (type, value) => {
  2045. return `${type}["${value}"]`
  2046. },
  2047. decodeDescription: (str) => {
  2048. const reg = /^http\.request\.uri\.args\["([^"]+)"\]$/
  2049. const match = str.match(reg)
  2050. if (match) {
  2051. return {
  2052. type: 'http.request.uri.args',
  2053. value: match[1],
  2054. }
  2055. }
  2056. return null
  2057. },
  2058. },
  2059. {
  2060. type: 'http.host',
  2061. valueType: null,
  2062. valueFormat: (type, value) => {
  2063. return `${type}`
  2064. },
  2065. decodeDescription: (str) => {
  2066. if (str === 'http.host') {
  2067. return {
  2068. type: 'http.host',
  2069. value: undefined,
  2070. }
  2071. }
  2072. return null
  2073. },
  2074. },
  2075. {
  2076. type: 'http.request.uri.path',
  2077. valueType: null,
  2078. valueFormat: (type, value) => {
  2079. return `${type}`
  2080. },
  2081. decodeDescription: (str) => {
  2082. if (str === 'http.request.uri.path') {
  2083. return {
  2084. type: 'http.request.uri.path',
  2085. value: undefined,
  2086. }
  2087. }
  2088. return null
  2089. },
  2090. },
  2091. {
  2092. type: 'ip.src.asnum',
  2093. valueType: null,
  2094. valueFormat: (type, value) => {
  2095. return `${type}`
  2096. },
  2097. decodeDescription: (str) => {
  2098. if (str === 'ip.src.asnum') {
  2099. return {
  2100. type: 'ip.src.asnum',
  2101. value: undefined,
  2102. }
  2103. }
  2104. return null
  2105. },
  2106. },
  2107. {
  2108. type: 'ip.src.country',
  2109. valueType: null,
  2110. valueFormat: (type, value) => {
  2111. return `${type}`
  2112. },
  2113. decodeDescription: (str) => {
  2114. if (str === 'ip.src.country') {
  2115. return {
  2116. type: 'ip.src.country',
  2117. value: undefined,
  2118. }
  2119. }
  2120. return null
  2121. },
  2122. },
  2123. {
  2124. type: 'cf.bot_management.ja3_hash',
  2125. valueType: null,
  2126. valueFormat: (type, value) => {
  2127. return `${type}`
  2128. },
  2129. decodeDescription: (str) => {
  2130. if (str === 'cf.bot_management.ja3_hash') {
  2131. return {
  2132. type: 'cf.bot_management.ja3_hash',
  2133. value: undefined,
  2134. }
  2135. }
  2136. return null
  2137. },
  2138. },
  2139. {
  2140. type: 'cf.bot_management.ja4',
  2141. valueType: null,
  2142. valueFormat: (type, value) => {
  2143. return `${type}`
  2144. },
  2145. decodeDescription: (str) => {
  2146. if (str === 'cf.bot_management.ja4') {
  2147. return {
  2148. type: 'cf.bot_management.ja4',
  2149. value: undefined,
  2150. }
  2151. }
  2152. return null
  2153. },
  2154. },
  2155. {
  2156. type: 'lookup_json_string',
  2157. valueType: 'input',
  2158. valueFormat: (type, value) => {
  2159. return `${type}(http.request.body.raw, "${value}")`
  2160. },
  2161. decodeDescription: (str) => {
  2162. const reg = /lookup_json_string\(http\.request\.body\.raw,\s*"([^"]+)"\)/
  2163. const match = str.match(reg)
  2164. if (match) {
  2165. return {
  2166. type: 'lookup_json_string',
  2167. value: match[1],
  2168. }
  2169. }
  2170. return null
  2171. },
  2172. },
  2173. {
  2174. type: 'lookup_json_integer',
  2175. valueType: 'input',
  2176. valueFormat: (type, value) => {
  2177. return `${type}(http.request.body.raw, "${value}")`
  2178. },
  2179. decodeDescription: (str) => {
  2180. const reg = /lookup_json_integer\(http\.request\.body\.raw,\s*"([^"]+)"\)/
  2181. const match = str.match(reg)
  2182. if (match) {
  2183. return {
  2184. type: 'lookup_json_integer',
  2185. value: match[1],
  2186. }
  2187. }
  2188. return null
  2189. },
  2190. },
  2191. {
  2192. type: 'http.request.body.form',
  2193. valueType: 'input',
  2194. valueFormat: (type, value) => {
  2195. return `${type}["${value}"]`
  2196. },
  2197. decodeDescription: (str) => {
  2198. const reg = /^http\.request\.body\.form\["([^"]+)"\]$/
  2199. const match = str.match(reg)
  2200. if (match) {
  2201. return {
  2202. type: 'http.request.body.form',
  2203. value: match[1],
  2204. }
  2205. }
  2206. return null
  2207. },
  2208. },
  2209. {
  2210. type: 'http.request.body.raw',
  2211. valueType: null,
  2212. valueFormat: (type, value) => {
  2213. return `${type}`
  2214. },
  2215. decodeDescription: (str) => {
  2216. if (str === 'http.request.body.raw') {
  2217. return {
  2218. type: 'http.request.body.raw',
  2219. value: undefined,
  2220. }
  2221. }
  2222. return null
  2223. },
  2224. },
  2225. {
  2226. type: 'http.request.body.size',
  2227. valueType: null,
  2228. valueFormat: (type, value) => {
  2229. return `${type}`
  2230. },
  2231. decodeDescription: (str) => {
  2232. if (str === 'http.request.body.size') {
  2233. return {
  2234. type: 'http.request.body.size',
  2235. value: undefined,
  2236. }
  2237. }
  2238. return null
  2239. },
  2240. },
  2241. {
  2242. type: 'custom',
  2243. valueType: 'input',
  2244. valueFormat: (type, value) => {
  2245. return `${value}`
  2246. },
  2247. decodeDescription: (str) => {
  2248. return {
  2249. type: 'custom',
  2250. value: str,
  2251. }
  2252. },
  2253. },
  2254. ]
  2255. export const WAF_RULE_TYPES_MAP = arrayToObj(WAF_RULE_TYPES, 'type')
  2256. export const RATE_LIMIT_RULE_TYPES_MAP = arrayToObj(RATE_LIMIT_RULE_TYPES, 'type')
  2257. export const isShowName = (typeKey, opt) => {
  2258. return (typeKey === 'http.request.cookies' || typeKey === 'http.request.headers') && opt !== 'len' && opt !== 'not_len'
  2259. }
  2260. export const isSwitch = (typeKey, opt) => {
  2261. return WAF_RULE_TYPES.filter(item => item.valueType === 'switch').some(item => item.type === typeKey)
  2262. }
  2263. // 去除引号
  2264. function removeQuotes (str) {
  2265. if (str.startsWith('"') && str.endsWith('"')) {
  2266. return str.slice(1, -1)
  2267. }
  2268. return str
  2269. }
  2270. function getMatchReg (type, str) {
  2271. const types = WAF_RULE_TYPES.map(item => item.type).map(type => type.replace(/\./g, '\\.'))
  2272. const regs = {
  2273. wildcard: `^(${types.join('|')}) wildcard r?"([^"]*)"$`,
  2274. strict_wildcard: `^(${types.join('|')}) strict wildcard r?"([^"]*)"$`,
  2275. switch_eq: `^(${types.join('|')})$`,
  2276. switch_ne: `^not (${types.join('|')})$`,
  2277. name_eq: `^any\\((${types.join('|')})\\["([^"]*)"\\]\\[\\*\\] eq "([^"]*)"\\)`,
  2278. eq_number: `^(${types.join('|')}) eq\\s*(\\d*)$`,
  2279. eq_string: `^(${types.join('|')}) eq "([^"]*)"$`,
  2280. eq_ip: `^(${types.join('|')}) eq ((?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)){3})$`,
  2281. eq_select_number: `^any\\((${types.join('|')})\\[\\*\\] eq\\s*(\\d*)\\)`,
  2282. name_ne: `^all\\((${types.join('|')})\\["([^"]*)"\\]\\[\\*\\] ne "([^"]*)"\\)`,
  2283. ne_number: `^(${types.join('|')}) ne\\s*(\\d*)$`,
  2284. ne_string: `^(${types.join('|')}) ne "([^"]*)"$`,
  2285. ne_ip: `^(${types.join('|')}) ne ((?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d{2}|[1-9]?\\d)){3})$`,
  2286. ne_select_number: `all\\((${types.join('|')})\\[\\*\\] ne\\s*(\\d*)\\)`,
  2287. name_contains: `any\\((${types.join('|')})\\["([^"]*)"\\]\\[\\*\\] contains "([^"]*)"\\)`,
  2288. contains_string: `^(${types.join('|')}) contains "([^"]*)"$`,
  2289. name_not_contains: `not any\\((${types.join('|')})\\["([^"]*)"\\]\\[\\*\\] contains "([^"]*)"\\)`,
  2290. not_contains_string: `^not (${types.join('|')}) contains "([^"]*)"$`,
  2291. name_matches: `^any\\((${types.join('|')})\\["([^"]*)"\\]\\[\\*\\] matches "([^"]*)"\\)`,
  2292. matches_string: `^(${types.join('|')}) matches r?"([^"]*)"$`,
  2293. name_not_matches: `^not any\\((${types.join('|')})\\["([^"]*)"\\]\\[\\*\\] matches "([^"]*)"\\)`,
  2294. not_matches_string: `^not (${types.join('|')}) matches r?"([^"]*)"$`,
  2295. starts_with: `^starts_with\\((${types.join('|')}),\\s*"([^"]*)"\\)$`,
  2296. not_starts_with: `^not starts_with\\((${types.join('|')}),\\s*"([^"]*)"\\)$`,
  2297. ends_with: `^ends_with\\((${types.join('|')}),\\s*"([^"]*)"\\)$`,
  2298. not_ends_with: `^not ends_with\\((${types.join('|')}),\\s*"([^"]*)"\\)$`,
  2299. name_in: `^any\\((${types.join('|')})\\["([^"]*)"\\]\\[\\*\\] in \\{((?:\\s*"[^"]+"\\s*)+)\\}\\)`,
  2300. in_number: `^(${types.join('|')}) in \\{([^}]+)\\}$`,
  2301. in_string: `^(${types.join('|')}) in \\{((?:\\s*"[^"]+"\\s*)+)\\}$`,
  2302. in_ips: `^(${types.join('|')}) in \\{([^"]*)\\}$`,
  2303. in_select_number: `^any\\((${types.join('|')})\\[\\*\\] in \\{((?:\\s*\\d+\\s*)+)\\}\\)`,
  2304. not_name_in: `^not any\\((${types.join('|')})\\["([^"]*)"\\]\\[\\*\\] in \\{((?:\\s*"[^"]+"\\s*)+)\\}\\)`,
  2305. not_in_number: `^not (${types.join('|')}) in \\{([^}]+)\\}$`,
  2306. not_in_string: `^not (${types.join('|')}) in \\{((?:\\s*"[^"]+"\\s*)+)\\}$`,
  2307. not_in_ips: `^not (${types.join('|')}) in \\{([^"]*)\\}$`,
  2308. not_in_select_number: `^not any\\((${types.join('|')})\\[\\*\\] in \\{((?:\\s*\\d+\\s*)+)\\}\\)`,
  2309. gt: `^(${types.join('|')}) gt\\s*(\\d*)$`,
  2310. lt: `^(${types.join('|')}) lt\\s*(\\d*)$`,
  2311. ge: `^(${types.join('|')}) ge\\s*(\\d*)$`,
  2312. le: `^(${types.join('|')}) le\\s*(\\d*)$`,
  2313. len: `^len\\((${types.join('|')})\\["([^"]*)"\\]\\) > 0$`,
  2314. not_len: `^not len\\((${types.join('|')})\\["([^"]*)"\\]\\) > 0$`,
  2315. in_list: `^(${types.join('|')}) in \\$(${IP_VALUE_LIST.map(item => item.key).join('|')})$`,
  2316. not_in_list: `^not (${types.join('|')}) in \\$(${IP_VALUE_LIST.map(item => item.key).join('|')})$`,
  2317. eq_json_string: '^lookup_json_string\\(http\\.request\\.body\\.raw,\\s*"([^"]+)"\\) eq "([^"]+)"$',
  2318. ne_json_string: '^lookup_json_string\\(http\\.request\\.body\\.raw,\\s*"([^"]+)"\\) ne "([^"]+)"$',
  2319. contains_json_string: '^lookup_json_string\\(http\\.request\\.body\\.raw,\\s*"([^"]+)"\\) contains "([^"]+)"$',
  2320. not_contains_json_string: '^not lookup_json_string\\(http\\.request\\.body\\.raw,\\s*"([^"]+)"\\) contains "([^"]+)"$',
  2321. matches_json_string: '^lookup_json_string\\(http\\.request\\.body\\.raw,\\s*"([^"]+)"\\) matches "([^"]+)"$',
  2322. not_matches_json_string: '^not lookup_json_string\\(http\\.request\\.body\\.raw,\\s*"([^"]+)"\\) matches "([^"]+)"$',
  2323. starts_with_json_string: '^lookup_json_string\\(http\\.request\\.body\\.raw,\\s*"([^"]+)"\\) starts_with "([^"]+)"$',
  2324. not_starts_with_json_string: '^not lookup_json_string\\(http\\.request\\.body\\.raw,\\s*"([^"]+)"\\) starts_with "([^"]+)"$',
  2325. ends_with_json_string: '^lookup_json_string\\(http\\.request\\.body\\.raw,\\s*"([^"]+)"\\) ends_with "([^"]+)"$',
  2326. not_ends_with_json_string: '^not lookup_json_string\\(http\\.request\\.body\\.raw,\\s*"([^"]+)"\\) ends_with "([^"]+)"$',
  2327. in_json_string: '^lookup_json_string\\(http\\.request\\.body\\.raw,\\s*"([^"]+)"\\) in \\{((?:\\s*"[^"]+"\\s*)+)\\}$',
  2328. not_in_json_string: '^not lookup_json_string\\(http\\.request\\.body\\.raw,\\s*"([^"]+)"\\) in \\{((?:\\s*"[^"]+"\\s*)+)\\}$',
  2329. }
  2330. const reg = new RegExp(regs[type])
  2331. const match = str.match(reg)
  2332. if (match) {
  2333. return {
  2334. match: true,
  2335. list: match.slice(1),
  2336. }
  2337. }
  2338. return { match: false }
  2339. }
  2340. // 运算符类型
  2341. export const WAF_RULE_OPTS_MAP = {
  2342. wildcard: {
  2343. valueFormat: (typeKey, name, value) => `${typeKey} wildcard "${value}"`,
  2344. decodeDescription: (str) => {
  2345. const { match, list } = getMatchReg('wildcard', str)
  2346. if (match) {
  2347. return {
  2348. type: list[0],
  2349. name: undefined,
  2350. opt: 'wildcard',
  2351. value: removeQuotes(list[1]),
  2352. }
  2353. }
  2354. return null
  2355. },
  2356. },
  2357. strict_wildcard:
  2358. {
  2359. key: 'strict wildcard',
  2360. valueFormat: (typeKey, name, value) => `${typeKey} strict wildcard "${value}"`,
  2361. decodeDescription: (str) => {
  2362. const { match, list } = getMatchReg('strict_wildcard', str)
  2363. if (match) {
  2364. return {
  2365. type: list[0],
  2366. name: undefined,
  2367. opt: 'strict wildcard',
  2368. value: removeQuotes(list[1]),
  2369. }
  2370. }
  2371. return null
  2372. },
  2373. },
  2374. eq: {
  2375. valueFormat: (typeKey, name, value) => {
  2376. if (isSwitch(typeKey)) {
  2377. return `${value ? '' : 'not '}${typeKey}`
  2378. }
  2379. if (isShowName(typeKey, 'eq')) {
  2380. return `any(${typeKey}["${name || ''}"][*] eq "${value}")`
  2381. }
  2382. if (typeKey === 'cf.bot_management.detection_ids') {
  2383. return `any(${typeKey}[*] eq ${value})`
  2384. }
  2385. if (getRuleConfig({ type: typeKey, opt: 'eq' }).valueType === 'input-number' || typeKey === 'ip.src') {
  2386. return `${typeKey} eq ${value}`
  2387. }
  2388. if (typeKey === 'lookup_json_string') {
  2389. return `lookup_json_string(http.request.body.raw, "${name}") eq "${value}"`
  2390. }
  2391. return `${typeKey} eq "${value}"`
  2392. },
  2393. decodeDescription: (str) => {
  2394. const { match, list } = getMatchReg('switch_eq', str)
  2395. if (match) {
  2396. return {
  2397. type: list[0],
  2398. name: undefined,
  2399. opt: 'eq',
  2400. value: true,
  2401. }
  2402. }
  2403. const { match: match1, list: list1 } = getMatchReg('switch_ne', str)
  2404. if (match1) {
  2405. return {
  2406. type: list1[0],
  2407. name: undefined,
  2408. opt: 'eq',
  2409. value: false,
  2410. }
  2411. }
  2412. const { match: match2, list: list2 } = getMatchReg('name_eq', str)
  2413. if (match2) {
  2414. return {
  2415. type: list2[0],
  2416. name: list2[1],
  2417. opt: 'eq',
  2418. value: list2[2],
  2419. }
  2420. }
  2421. const { match: match3, list: list3 } = getMatchReg('eq_number', str)
  2422. if (match3) {
  2423. return {
  2424. type: list3[0],
  2425. name: undefined,
  2426. opt: 'eq',
  2427. value: list3[1] ? Number(list3[1]) : undefined,
  2428. }
  2429. }
  2430. const { match: match4, list: list4 } = getMatchReg('eq_string', str)
  2431. if (match4) {
  2432. if (list4[0] === 'cf.verified_bot_category') {
  2433. if (!BOT_CATEGORIES.some(item => item.key === list4[1])) return null
  2434. }
  2435. return {
  2436. type: list4[0],
  2437. name: undefined,
  2438. opt: 'eq',
  2439. value: list4[1],
  2440. }
  2441. }
  2442. const { match: match5, list: list5 } = getMatchReg('eq_ip', str)
  2443. if (match5) {
  2444. return {
  2445. type: list5[0],
  2446. name: undefined,
  2447. opt: 'eq',
  2448. value: list5[1],
  2449. }
  2450. }
  2451. const { match: match6, list: list6 } = getMatchReg('eq_select_number', str)
  2452. if (str.includes('cf.bot_management.detection_ids') && match6) {
  2453. return {
  2454. type: list6[0],
  2455. name: undefined,
  2456. opt: 'eq',
  2457. value: list6[1],
  2458. }
  2459. }
  2460. const { match: match7, list: list7 } = getMatchReg('eq_json_string', str)
  2461. if (match7) {
  2462. return {
  2463. type: 'lookup_json_string',
  2464. name: list7[0],
  2465. opt: 'eq',
  2466. value: list7[1],
  2467. }
  2468. }
  2469. return null
  2470. },
  2471. },
  2472. ne: {
  2473. valueFormat: (typeKey, name, value) => {
  2474. if (isShowName(typeKey, 'ne')) {
  2475. return `all(${typeKey}["${name || ''}"][*] ne "${value}")`
  2476. }
  2477. if (getRuleConfig({ type: typeKey, opt: 'ne' }).valueType === 'input-number' || typeKey === 'ip.src') {
  2478. return `${typeKey} ne ${value}`
  2479. }
  2480. if (typeKey === 'cf.bot_management.detection_ids') {
  2481. return `all(${typeKey}[*] ne ${value})`
  2482. }
  2483. if (typeKey === 'lookup_json_string') {
  2484. return `lookup_json_string(http.request.body.raw, "${name}") ne "${value}"`
  2485. }
  2486. return `${typeKey} ne "${value}"`
  2487. },
  2488. decodeDescription: (str) => {
  2489. const { match, list } = getMatchReg('name_ne', str)
  2490. if (match) {
  2491. return {
  2492. type: list[0],
  2493. name: list[1],
  2494. opt: 'ne',
  2495. value: list[2],
  2496. }
  2497. }
  2498. const { match: match1, list: list1 } = getMatchReg('ne_number', str)
  2499. if (match1) {
  2500. return {
  2501. type: list1[0],
  2502. name: undefined,
  2503. opt: 'ne',
  2504. value: list1[1] ? Number(list1[1]) : undefined,
  2505. }
  2506. }
  2507. const { match: match2, list: list2 } = getMatchReg('ne_string', str)
  2508. if (match2) {
  2509. if (list2[0] === 'cf.verified_bot_category') {
  2510. if (!BOT_CATEGORIES.some(item => item.key === list2[1])) return null
  2511. }
  2512. return {
  2513. type: list2[0],
  2514. name: undefined,
  2515. opt: 'ne',
  2516. value: list2[1],
  2517. }
  2518. }
  2519. const { match: match3, list: list3 } = getMatchReg('ne_ip', str)
  2520. if (match3) {
  2521. return {
  2522. type: list3[0],
  2523. name: undefined,
  2524. opt: 'ne',
  2525. value: list3[1],
  2526. }
  2527. }
  2528. const { match: match4, list: list4 } = getMatchReg('ne_select_number', str)
  2529. if (str.includes('cf.bot_management.detection_ids') && match4) {
  2530. return {
  2531. type: list4[0],
  2532. name: undefined,
  2533. opt: 'ne',
  2534. value: list4[1] ? Number(list4[1]) : undefined,
  2535. }
  2536. }
  2537. const { match: match5, list: list5 } = getMatchReg('ne_json_string', str)
  2538. if (match5) {
  2539. return {
  2540. type: 'lookup_json_string',
  2541. name: list5[0],
  2542. opt: 'ne',
  2543. value: list5[1],
  2544. }
  2545. }
  2546. return null
  2547. },
  2548. },
  2549. contains: {
  2550. valueFormat: (typeKey, name, value) => {
  2551. if (isShowName(typeKey, 'contains')) {
  2552. return `any(${typeKey}["${name || ''}"][*] contains "${value}")`
  2553. }
  2554. if (typeKey === 'lookup_json_string') {
  2555. return `lookup_json_string(http.request.body.raw, "${name}") contains "${value}"`
  2556. }
  2557. return `${typeKey} contains "${value}"`
  2558. },
  2559. decodeDescription: (str) => {
  2560. const { match, list } = getMatchReg('name_contains', str)
  2561. if (match) {
  2562. return {
  2563. type: list[0],
  2564. name: list[1],
  2565. opt: 'contains',
  2566. value: list[2],
  2567. }
  2568. }
  2569. const { match: match1, list: list1 } = getMatchReg('contains_string', str)
  2570. if (match1) {
  2571. return {
  2572. type: list1[0],
  2573. name: undefined,
  2574. opt: 'contains',
  2575. value: list1[1],
  2576. }
  2577. }
  2578. const { match: match2, list: list2 } = getMatchReg('contains_json_string', str)
  2579. if (match2) {
  2580. return {
  2581. type: 'lookup_json_string',
  2582. name: list2[0],
  2583. opt: 'contains',
  2584. value: list2[1],
  2585. }
  2586. }
  2587. return null
  2588. },
  2589. },
  2590. not_contains: {
  2591. valueFormat: (typeKey, name, value) => {
  2592. if (isShowName(typeKey, 'not_contains')) {
  2593. return `not any(${typeKey}["${name || ''}"][*] contains "${value}")`
  2594. }
  2595. if (typeKey === 'lookup_json_string') {
  2596. return `not lookup_json_string(http.request.body.raw, "${name}") contains "${value}"`
  2597. }
  2598. return `not ${typeKey} contains "${value}"`
  2599. },
  2600. decodeDescription: (str) => {
  2601. const { match, list } = getMatchReg('name_not_contains', str)
  2602. if (match) {
  2603. return {
  2604. type: list[0],
  2605. name: list[1],
  2606. opt: 'not_contains',
  2607. value: list[2],
  2608. }
  2609. }
  2610. const { match: match1, list: list1 } = getMatchReg('not_contains_string', str)
  2611. if (match1) {
  2612. return {
  2613. type: list1[0],
  2614. name: undefined,
  2615. opt: 'not_contains',
  2616. value: list1[1],
  2617. }
  2618. }
  2619. const { match: match2, list: list2 } = getMatchReg('not_contains_json_string', str)
  2620. if (match2) {
  2621. return {
  2622. type: 'lookup_json_string',
  2623. name: list2[0],
  2624. opt: 'not_contains',
  2625. value: list2[1],
  2626. }
  2627. }
  2628. return null
  2629. },
  2630. },
  2631. matches: {
  2632. valueFormat: (typeKey, name, value) => {
  2633. if (isShowName(typeKey, 'matches')) {
  2634. return `any(${typeKey}["${name || ''}"][*] matches "${value}")`
  2635. }
  2636. if (typeKey === 'lookup_json_string') {
  2637. return `lookup_json_string(http.request.body.raw, "${name}") matches "${value}"`
  2638. }
  2639. return `${typeKey} matches "${value}"`
  2640. },
  2641. decodeDescription: (str) => {
  2642. const { match, list } = getMatchReg('name_matches', str)
  2643. if (match) {
  2644. return {
  2645. type: list[0],
  2646. name: list[1],
  2647. opt: 'matches',
  2648. value: list[2],
  2649. }
  2650. }
  2651. const { match: match1, list: list1 } = getMatchReg('matches_string', str)
  2652. if (match1) {
  2653. return {
  2654. type: list1[0],
  2655. name: undefined,
  2656. opt: 'matches',
  2657. value: list1[1],
  2658. }
  2659. }
  2660. const { match: match2, list: list2 } = getMatchReg('matches_json_string', str)
  2661. if (match2) {
  2662. return {
  2663. type: 'lookup_json_string',
  2664. name: list2[0],
  2665. opt: 'matches',
  2666. value: list2[1],
  2667. }
  2668. }
  2669. return null
  2670. },
  2671. },
  2672. not_matches: {
  2673. valueFormat: (typeKey, name, value) => {
  2674. if (isShowName(typeKey, 'not_matches')) {
  2675. return `not any(${typeKey}["${name || ''}"][*] matches "${value}")`
  2676. }
  2677. if (typeKey === 'lookup_json_string') {
  2678. return `not lookup_json_string(http.request.body.raw, "${name}") matches "${value}"`
  2679. }
  2680. return `not ${typeKey} matches "${value}"`
  2681. },
  2682. decodeDescription: (str) => {
  2683. const { match, list } = getMatchReg('name_not_matches', str)
  2684. if (match) {
  2685. return {
  2686. type: list[0],
  2687. name: list[1],
  2688. opt: 'not_matches',
  2689. value: list[2],
  2690. }
  2691. }
  2692. const { match: match1, list: list1 } = getMatchReg('not_matches_string', str)
  2693. if (match1) {
  2694. return {
  2695. type: list1[0],
  2696. name: undefined,
  2697. opt: 'not_matches',
  2698. value: list1[1],
  2699. }
  2700. }
  2701. const { match: match2, list: list2 } = getMatchReg('not_matches_json_string', str)
  2702. if (match2) {
  2703. return {
  2704. type: 'lookup_json_string',
  2705. name: list2[0],
  2706. opt: 'not_matches',
  2707. value: list2[1],
  2708. }
  2709. }
  2710. return null
  2711. },
  2712. },
  2713. starts_with: {
  2714. valueFormat: (typeKey, name, value) => {
  2715. if (typeKey === 'lookup_json_string') {
  2716. return `lookup_json_string(http.request.body.raw, "${name}") starts_with "${value}"`
  2717. }
  2718. return `starts_with(${typeKey}, "${value}")`
  2719. },
  2720. decodeDescription: (str) => {
  2721. const { match, list } = getMatchReg('starts_with', str)
  2722. if (match) {
  2723. return {
  2724. type: list[0],
  2725. name: undefined,
  2726. opt: 'starts_with',
  2727. value: list[1],
  2728. }
  2729. }
  2730. const { match: match1, list: list1 } = getMatchReg('starts_with_json_string', str)
  2731. if (match1) {
  2732. return {
  2733. type: 'lookup_json_string',
  2734. name: list1[0],
  2735. opt: 'starts_with',
  2736. value: list1[1],
  2737. }
  2738. }
  2739. return null
  2740. },
  2741. },
  2742. not_starts_with: {
  2743. valueFormat: (typeKey, name, value) => {
  2744. if (typeKey === 'lookup_json_string') {
  2745. return `not lookup_json_string(http.request.body.raw, "${name}") starts_with "${value}"`
  2746. }
  2747. return `not starts_with(${typeKey}, "${value}")`
  2748. },
  2749. decodeDescription: (str) => {
  2750. const { match, list } = getMatchReg('not_starts_with', str)
  2751. if (match) {
  2752. return {
  2753. type: list[0],
  2754. name: undefined,
  2755. opt: 'not_starts_with',
  2756. value: list[1],
  2757. }
  2758. }
  2759. const { match: match1, list: list1 } = getMatchReg('not_starts_with_json_string', str)
  2760. if (match1) {
  2761. return {
  2762. type: 'lookup_json_string',
  2763. name: list1[0],
  2764. opt: 'not_starts_with',
  2765. value: list1[1],
  2766. }
  2767. }
  2768. return null
  2769. },
  2770. },
  2771. ends_with: {
  2772. valueType: 'input',
  2773. valueFormat: (typeKey, name, value) => {
  2774. if (typeKey === 'lookup_json_string') {
  2775. return `lookup_json_string(http.request.body.raw, "${name}") ends_with "${value}"`
  2776. }
  2777. return `ends_with(${typeKey}, "${value}")`
  2778. },
  2779. decodeDescription: (str) => {
  2780. const { match, list } = getMatchReg('ends_with', str)
  2781. if (match) {
  2782. return {
  2783. type: list[0],
  2784. name: undefined,
  2785. opt: 'ends_with',
  2786. value: list[1],
  2787. }
  2788. }
  2789. const { match: match1, list: list1 } = getMatchReg('ends_with_json_string', str)
  2790. if (match1) {
  2791. return {
  2792. type: 'lookup_json_string',
  2793. name: list1[0],
  2794. opt: 'ends_with',
  2795. value: list1[1],
  2796. }
  2797. }
  2798. return null
  2799. },
  2800. },
  2801. not_ends_with: {
  2802. valueFormat: (typeKey, name, value) => {
  2803. if (typeKey === 'lookup_json_string') {
  2804. return `not lookup_json_string(http.request.body.raw, "${name}") ends_with "${value}"`
  2805. }
  2806. return `not ends_with(${typeKey}, "${value}")`
  2807. },
  2808. decodeDescription: (str) => {
  2809. const { match, list } = getMatchReg('not_ends_with', str)
  2810. if (match) {
  2811. return {
  2812. type: list[0],
  2813. name: undefined,
  2814. opt: 'not_ends_with',
  2815. value: list[1],
  2816. }
  2817. }
  2818. const { match: match1, list: list1 } = getMatchReg('not_ends_with_json_string', str)
  2819. if (match1) {
  2820. return {
  2821. type: 'lookup_json_string',
  2822. name: list1[0],
  2823. opt: 'not_ends_with',
  2824. value: list1[1],
  2825. }
  2826. }
  2827. return null
  2828. },
  2829. },
  2830. in: {
  2831. valueFormat: (typeKey, name, value) => {
  2832. if (isShowName(typeKey, 'in')) {
  2833. return `any(${typeKey}["${name || ''}"][*] in {${value.map(v => `"${v}"`).join(' ') || '""'}})`
  2834. }
  2835. if (getRuleConfig({ type: typeKey, opt: 'eq' }).valueType === 'input-number' || typeKey === 'ip.src') {
  2836. return `${typeKey} in {${value.map(v => `${v}`).join(' ') || ''}}`
  2837. }
  2838. if (typeKey === 'cf.bot_management.detection_ids') {
  2839. return `any(${typeKey}[*] in {${value.map(v => `${v}`).join(' ') || ''}})`
  2840. }
  2841. if (typeKey === 'lookup_json_string') {
  2842. return `lookup_json_string(http.request.body.raw, "${name}") in {${value.map(v => `"${v}"`).join(' ') || '""'}}`
  2843. }
  2844. return `${typeKey} in {${value.map(v => `"${v}"`).join(' ') || '""'}}`
  2845. },
  2846. decodeDescription: (str) => {
  2847. const { match, list } = getMatchReg('name_in', str)
  2848. if (match) {
  2849. const valueArr = []
  2850. const ls = list[2].split(/\s+/)
  2851. ls.forEach(v => {
  2852. if (v.startsWith('"') && v.endsWith('"')) {
  2853. valueArr.push(removeQuotes(v))
  2854. } else {
  2855. valueArr.push(v)
  2856. }
  2857. })
  2858. return {
  2859. type: list[0],
  2860. name: list[1],
  2861. opt: 'in',
  2862. value: valueArr,
  2863. }
  2864. }
  2865. const { match: match2, list: list2 } = getMatchReg('in_string', str)
  2866. if (match2) {
  2867. const valueArr = []
  2868. const list = list2[1].split(/\s+/)
  2869. list.forEach(v => {
  2870. if (v.startsWith('"') && v.endsWith('"')) {
  2871. valueArr.push(removeQuotes(v))
  2872. } else {
  2873. valueArr.push(v)
  2874. }
  2875. })
  2876. if (list2[0] === 'cf.verified_bot_category') {
  2877. if (valueArr.some(v => !BOT_CATEGORIES.some(item => item.key === v))) return null
  2878. }
  2879. return {
  2880. type: list2[0],
  2881. name: undefined,
  2882. opt: 'in',
  2883. value: valueArr,
  2884. }
  2885. }
  2886. const { match: match3, list: list3 } = getMatchReg('in_ips', str)
  2887. const regex = /^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}\s*)*)$/
  2888. if (match3 && list3[1] && regex.test(list3[1])) {
  2889. return {
  2890. type: list3[0],
  2891. name: undefined,
  2892. opt: 'in',
  2893. value: list3[1].trim().split(/\s+/),
  2894. }
  2895. }
  2896. const { match: match1, list: list1 } = getMatchReg('in_number', str)
  2897. if (match1) {
  2898. return {
  2899. type: list1[0],
  2900. name: undefined,
  2901. opt: 'in',
  2902. value: list1[1].trim().split(/\s+/).map(v => v ? Number(v) : undefined),
  2903. }
  2904. }
  2905. const { match: match4, list: list4 } = getMatchReg('in_select_number', str)
  2906. if (str.includes('cf.bot_management.detection_ids') && match4) {
  2907. return {
  2908. type: list4[0],
  2909. name: undefined,
  2910. opt: 'in',
  2911. value: list4[1].trim().split(/\s+/).map(v => Number(v)),
  2912. }
  2913. }
  2914. const { match: match5, list: list5 } = getMatchReg('in_json_string', str)
  2915. if (match5) {
  2916. return {
  2917. type: 'lookup_json_string',
  2918. name: list5[0],
  2919. opt: 'in',
  2920. value: list5[1].trim().split(/\s+/).map(v => removeQuotes(v)),
  2921. }
  2922. }
  2923. return null
  2924. },
  2925. },
  2926. not_in: {
  2927. valueFormat: (typeKey, name, value) => {
  2928. if (isShowName(typeKey, 'not_in')) {
  2929. return `not any(${typeKey}["${name || ''}"][*] in {${value.map(v => `"${v}"`).join(' ') || '""'}})`
  2930. }
  2931. if (getRuleConfig({ type: typeKey, opt: 'ne' }).valueType === 'input-number' || typeKey === 'ip.src') {
  2932. return `not ${typeKey} in {${value.map(v => `${v}`).join(' ') || ''}}`
  2933. }
  2934. if (typeKey === 'cf.bot_management.detection_ids') {
  2935. return `not any(${typeKey}[*] in {${value.map(v => `${v}`).join(' ') || ''}})`
  2936. }
  2937. if (typeKey === 'lookup_json_string') {
  2938. return `not lookup_json_string(http.request.body.raw, "${name}") in {${value.map(v => `"${v}"`).join(' ') || '""'}}`
  2939. }
  2940. return `not ${typeKey} in {${value.map(v => `"${v}"`).join(' ') || '""'}}`
  2941. },
  2942. decodeDescription: (str) => {
  2943. const { match, list } = getMatchReg('not_name_in', str)
  2944. if (match) {
  2945. const valueArr = []
  2946. const ls = list[2].split(/\s+/)
  2947. ls.forEach(v => {
  2948. if (v.startsWith('"') && v.endsWith('"')) {
  2949. valueArr.push(removeQuotes(v))
  2950. } else {
  2951. valueArr.push(v)
  2952. }
  2953. })
  2954. return {
  2955. type: list[0],
  2956. name: list[1],
  2957. opt: 'not_in',
  2958. value: valueArr,
  2959. }
  2960. }
  2961. const { match: match2, list: list2 } = getMatchReg('not_in_string', str)
  2962. if (match2) {
  2963. const valueArr = []
  2964. const ls = list2[1].split(/\s+/)
  2965. ls.forEach(v => {
  2966. if (v.startsWith('"') && v.endsWith('"')) {
  2967. valueArr.push(removeQuotes(v))
  2968. } else {
  2969. valueArr.push(v)
  2970. }
  2971. })
  2972. if (list2[0] === 'cf.verified_bot_category') {
  2973. if (valueArr.some(v => !BOT_CATEGORIES.some(item => item.key === v))) return null
  2974. }
  2975. return {
  2976. type: list2[0],
  2977. name: undefined,
  2978. opt: 'not_in',
  2979. value: valueArr,
  2980. }
  2981. }
  2982. const { match: match3, list: list3 } = getMatchReg('not_in_ips', str)
  2983. const regex = /^((?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}\s*)*)$/
  2984. if (match3 && list3[1] && regex.test(list3[1])) {
  2985. return {
  2986. type: list3[0],
  2987. name: undefined,
  2988. opt: 'not_in',
  2989. value: list3[1].trim().split(/\s+/),
  2990. }
  2991. }
  2992. const { match: match1, list: list1 } = getMatchReg('not_in_number', str)
  2993. if (match1) {
  2994. return {
  2995. type: list1[0],
  2996. name: undefined,
  2997. opt: 'not_in',
  2998. value: list1[1].trim().split(/\s+/).map(v => v ? Number(v) : undefined),
  2999. }
  3000. }
  3001. const { match: match4, list: list4 } = getMatchReg('not_in_select_number', str)
  3002. if (str.includes('cf.bot_management.detection_ids') && match4) {
  3003. return {
  3004. type: list4[0],
  3005. name: undefined,
  3006. opt: 'not_in',
  3007. value: list4[1].trim().split(/\s+/).map(v => Number(v)),
  3008. }
  3009. }
  3010. const { match: match5, list: list5 } = getMatchReg('not_in_json_string', str)
  3011. if (match5) {
  3012. return {
  3013. type: 'lookup_json_string',
  3014. name: list5[0],
  3015. opt: 'not_in',
  3016. value: list5[1].trim().split(/\s+/).map(v => removeQuotes(v)),
  3017. }
  3018. }
  3019. return null
  3020. },
  3021. },
  3022. gt: {
  3023. valueFormat: (typeKey, name, value) => `${typeKey} gt ${value}`,
  3024. decodeDescription: (str) => {
  3025. const { match, list } = getMatchReg('gt', str)
  3026. if (match) {
  3027. return {
  3028. type: list[0],
  3029. name: undefined,
  3030. opt: 'gt',
  3031. value: list[1] ? Number(list[1]) : undefined,
  3032. }
  3033. }
  3034. return null
  3035. },
  3036. },
  3037. lt: {
  3038. valueFormat: (typeKey, name, value) => `${typeKey} lt ${value}`,
  3039. decodeDescription: (str) => {
  3040. const { match, list } = getMatchReg('lt', str)
  3041. if (match) {
  3042. return {
  3043. type: list[0],
  3044. name: undefined,
  3045. opt: 'lt',
  3046. value: list[1] ? Number(list[1]) : undefined,
  3047. }
  3048. }
  3049. return null
  3050. },
  3051. },
  3052. ge: {
  3053. valueFormat: (typeKey, name, value) => `${typeKey} ge ${value}`,
  3054. decodeDescription: (str) => {
  3055. const { match, list } = getMatchReg('ge', str)
  3056. if (match) {
  3057. return {
  3058. type: list[0],
  3059. name: undefined,
  3060. opt: 'ge',
  3061. value: list[1] ? Number(list[1]) : undefined,
  3062. }
  3063. }
  3064. return null
  3065. },
  3066. },
  3067. le: {
  3068. valueFormat: (typeKey, name, value) => `${typeKey} le ${value}`,
  3069. decodeDescription: (str) => {
  3070. const { match, list } = getMatchReg('le', str)
  3071. if (match) {
  3072. return {
  3073. type: list[0],
  3074. name: undefined,
  3075. opt: 'le',
  3076. value: list[1] ? Number(list[1]) : undefined,
  3077. }
  3078. }
  3079. return null
  3080. },
  3081. },
  3082. in_list: {
  3083. valueFormat: (typeKey, name, value) => {
  3084. if (typeKey === 'ip.src') {
  3085. return `${typeKey} in $${value}`
  3086. }
  3087. return `${typeKey} in $${value.map(v => `"${v}"`).join(' ') || '""'}`
  3088. },
  3089. decodeDescription: (str) => {
  3090. const { match, list } = getMatchReg('in_list', str)
  3091. if (match) {
  3092. return {
  3093. type: list[0],
  3094. name: undefined,
  3095. opt: 'in_list',
  3096. value: list[1],
  3097. }
  3098. }
  3099. return null
  3100. },
  3101. },
  3102. not_in_list: {
  3103. valueFormat: (typeKey, name, value) => {
  3104. if (typeKey === 'ip.src') {
  3105. return `not ${typeKey} in $${value}`
  3106. }
  3107. return `not ${typeKey} in $${value.map(v => `"${v}"`).join(' ') || '""'}`
  3108. },
  3109. decodeDescription: (str) => {
  3110. const { match, list } = getMatchReg('not_in_list', str)
  3111. if (match) {
  3112. return {
  3113. type: list[0],
  3114. name: undefined,
  3115. opt: 'not_in_list',
  3116. value: list[1],
  3117. }
  3118. }
  3119. return null
  3120. },
  3121. },
  3122. switch_eq: {
  3123. valueFormat: (typeKey, name, value) => `${value ? '' : 'not '}${typeKey}`,
  3124. decodeDescription: (str) => {
  3125. const { match, list } = getMatchReg('switch_eq', str)
  3126. if (match) {
  3127. return {
  3128. type: list[0],
  3129. name: undefined,
  3130. opt: 'switch_eq',
  3131. value: true,
  3132. }
  3133. }
  3134. return null
  3135. },
  3136. },
  3137. len: {
  3138. valueFormat: (typeKey, name, value) => `len(${typeKey}["${value}"]) > 0`,
  3139. decodeDescription: (str) => {
  3140. const { match, list } = getMatchReg('len', str)
  3141. if (match) {
  3142. return {
  3143. type: list[0],
  3144. name: undefined,
  3145. opt: 'len',
  3146. value: list[1],
  3147. }
  3148. }
  3149. return null
  3150. },
  3151. },
  3152. not_len: {
  3153. valueFormat: (typeKey, name, value) => `not len(${typeKey}["${value}"]) > 0`,
  3154. decodeDescription: (str) => {
  3155. const { match, list } = getMatchReg('not_len', str)
  3156. if (match) {
  3157. return {
  3158. type: list[0],
  3159. name: undefined,
  3160. opt: 'not_len',
  3161. value: list[1],
  3162. }
  3163. }
  3164. return null
  3165. },
  3166. },
  3167. }
  3168. export const RULE_ACTIONS = [
  3169. {
  3170. key: 'managed_challenge',
  3171. label: i18n.t('network.waf.rule_action.managed_challenge'),
  3172. },
  3173. {
  3174. key: 'log',
  3175. label: i18n.t('network.waf.rule_action.log'),
  3176. },
  3177. {
  3178. key: 'block',
  3179. label: i18n.t('network.waf.rule_action.block'),
  3180. },
  3181. {
  3182. key: 'allow',
  3183. label: i18n.t('network.waf.rule_action.allow'),
  3184. },
  3185. {
  3186. key: 'js_challenge',
  3187. label: i18n.t('network.waf.rule_action.js_challenge'),
  3188. },
  3189. {
  3190. key: 'skip',
  3191. label: i18n.t('network.waf.rule_action.skip'),
  3192. },
  3193. {
  3194. key: 'challenge',
  3195. label: i18n.t('network.waf.rule_action.challenge'),
  3196. },
  3197. ]
  3198. export const BLOCK_TYPES = [
  3199. {
  3200. key: 'default',
  3201. label: i18n.t('network.waf.block_type.default'),
  3202. },
  3203. {
  3204. key: 'text/html',
  3205. label: i18n.t('network.waf.block_type.text_html'),
  3206. },
  3207. {
  3208. key: 'text/plain',
  3209. label: i18n.t('network.waf.block_type.text_plain'),
  3210. },
  3211. {
  3212. key: 'application/json',
  3213. label: i18n.t('network.waf.block_type.application_json'),
  3214. },
  3215. {
  3216. key: 'text/xml',
  3217. label: i18n.t('network.waf.block_type.text_xml'),
  3218. },
  3219. ]