Mikrotik: Regex URL Block

From OnnoWiki
Jump to navigation Jump to search

Sumber: https://support.1blocker.com/hc/en-us/articles/360002309778-Using-Regex-to-Block-URLs

Berikut adalah catatan umum tentang regex, belum tentu 100% jalan di Mikrotik terutama pakai CLI. Sarannya harus di coba2 mana yang bisa jalan. Tampaknya ?, (, [ sering bermasalah terutama di CLI Mikrotik.

Dalam regex, setiap karakter "encoded" dan divalidasi simbol demi simbol dari kiri ke kanan. Kita dapat membagi karakter regex menjadi dua grup:

  • karakter biasa seperti huruf, angka, dan beberapa simbol. Ketika mesin regex bertemu dengan karakter biasa, dia mengartikan karakter seperti apa adanya, tanpa mengubah fungsinya. Misalnya, kata "blocker" regex menggunakan pola yang paling dasar, cukup mencocokkan kata "blocker" yang sebenarnya.
  • Special karakter, di sinilah kekuatan besar regex terletak. Beberapa karakter regex membuat mesin bertindak dengan cara khusus, dan akan memungkinkan pencarian lebih fleksibel. Misalnya, sebuah titik. cocok dengan karakter apa pun, sehingga tiga titik ... dapat berarti: dog, cat, run, one, etc. Berikut adalah karakter spesial:
. - a dot
[] - square brackets
() - parentheses
? - a question mark
* - an asterisk
+ - a plus
^ - a caret 

Jika URL berisi salah satu karakter spesial, maka karakter tersebut harus di escape menggunakan backslash \.

Contoh, kita akan memblokir URL: https://domain.com Ada sebuah dot sebelum "com". Mesin akan berfikir ada sebuah karakter sebelum com, tidak harus dot. Contoh, mesin akan match dengan https://domain#com , tentunya bukan yang kita inginkan. Oleh karenanya kita perlu menambahkan backslash sebelum dot agar match secara literal https://domain\.com, sehingga regex akan melihat ada dot sebelum "com".

Special Character

Mari kita lihat lebih dalam tentang masing-masing special character.

  • . (dot) dapat mencocokkan karakter tunggal apa pun (huruf, angka, spasi putih, apa saja). Jika kita benar-benar membutuhkan titik di URL, jangan lupa untuk meng-escape-nya dengan \. Misalnya, https: //1bl.cker \ .com akan memblokir tidak hanya https://1blocker.com, tetapi juga https://1blucker.com, https://1bl1cker.com, dll.
  • a-c], [abc] atau serangkaian karakter di dalam [kurung siku] hanya akan cocok dengan kombinasi karakter yang diberikan [abc] atau serangkaian karakter [a-c] berurutan dan tidak ada yang lain. Dengan kata lain, aturan akan dipicu hanya jika salah satu karakter yang diberikan dalam tanda kurung siku ditemukan di tempat yang sesuai di URL. Beberapa contoh: pola https: // 1blocker \. [kc] om sesuai dengan https: //1blocker.сom atau https: //1blocker.kom. Dan omong-omong tentang rentang karakter, https: // [1-3] blocker \ .com akan cocok dengan tiga situs web, https://1blocker.com, https://2blocker.com, dan https://3blocker.com.
  • ? memungkinkan kita untuk mencocokkan dengan nol atau salah satu karakter sebelumnya atau grup karakter. Dengan kata lain, ini menunjukkan opsionalitas. Kita dapat menggunakannya dalam pola apa pun untuk mencocokkan versi http dan https dari situs web yang sama. Jadi polanya https?://domain.сom akan memblokir http://domain.com dan https://domain.сom.
  • (abc) dapat menangkap subpattern di dalam sepasang tanda kurung sebagai grup, yang berarti bahwa kita dapat menerapkan simbol khusus lainnya, mis., +, * atau? ke seluruh kelompok. Mari kita lihat pola ini: https://(. * \.)?domain\ .com. Ini tidak hanya akan memblokir https://domain.com tetapi juga subdomain yang terdiri dari sejumlah karakter, misalnya, https://ads.domain.com. Mari kita uraikan polanya. Di sini kami memiliki grup yang ditandai oleh (). Seluruh grup bersifat opsional karena?, Dan grup itu sendiri terdiri dari sejumlah (*) karakter apa saja (.) dan sebuah dot yang di escaped \.
  • ^ tanda sisipan di awal pola membatasi URL untuk memulai hanya dengan karakter yang mengikuti tanda sisipan (^). Juga, Tanda kurung di dalam tanda kurung kotak memberitahu mesin untuk mencocokkan semua karakter kecuali yang di dalam tanda kurung kotak diberikan.

Berikut adalah contoh yang dimaksud:

  • pola berikut ^https://domain\.com akan memastikan bahwa tidak ada yang mendahului huruf h, itu harus karakter pertama dari string. Jadi, jika URL target adalah bagian dari URL lain, aturannya tidak akan berfungsi: https://anotherdomain.com/https://domain.com.
  • Dan contoh menggunakan tanda kurung dalam kurung siku [], pola https://[^d]omain\.com tidak akan cocok dengan domain.com, tetapi akan bekerja untuk lomain.com, romain.com, dll.

Template Yang Berguna

Berikut adalah dua (2) pola dasar yang dapat kita terapkan untuk membuat aturan pemblokiran kustom yang efektif.

.* 

Itu cocok dengan URL apa pun, tidak peduli karakter apa yang dikandungnya atau jumlah total karakternya.

^https?://+([^:/]+\.)?domain\.com[:/]

Apple merekomendasikan untuk menggunakan pola ini, karena memblokir subdomain dan cukup seimbang, sehingga mengurangi kesalahan. Mari kita bagi menjadi beberapa bagian yang lebih kecil:

  • ^https?://+ match http:// and https:// dan memastikan tidak ada text sebelum URL;
  • ([^:/]+\.)? men-target-0kan semua subdomain jika ada;
  • domain\.com match domain itu sendiri;
  • [:/] bagian kecil ini memblokir domain bahkan jika URL berisi bagian tambahan setelah .com. Misalnya, domain.com/page atau domain.com:8000


Referensi


Pranala Menarik