DEF
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+
test
+`"'>
+`"'>
+`"'>
+`"'>
+`"'>
+`"'>
+`"'>
+`"'>
+`"'>
+`"'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+"`'>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
XXX
+
+
+
+
+
+
+
+
+">
+
+
+
+
+
+
+
+
+
+
+
+perl -e 'print "";' > out
+
+
+
+
+<
+
+
+# SQL Injection
+#
+# Strings which can cause a SQL injection if inputs are not sanitized
+
+1;DROP TABLE users
+1'; DROP TABLE users-- 1
+' OR 1=1 -- 1
+' OR '1'='1
+'; EXEC sp_MSForEachTable 'DROP TABLE ?'; --
+
+%
+_
+
+# Server Code Injection
+#
+# Strings which can cause user to run code on server as a privileged user (c.f. https://news.ycombinator.com/item?id=7665153)
+
+-
+--
+--version
+--help
+$USER
+/dev/null; touch /tmp/blns.fail ; echo
+`touch /tmp/blns.fail`
+$(touch /tmp/blns.fail)
+@{[system "touch /tmp/blns.fail"]}
+
+# Command Injection (Ruby)
+#
+# Strings which can call system commands within Ruby/Rails applications
+
+eval("puts 'hello world'")
+System("ls -al /")
+`ls -al /`
+Kernel.exec("ls -al /")
+Kernel.exit(1)
+%x('ls -al /')
+
+# XXE Injection (XML)
+#
+# String which can reveal system files when parsed by a badly configured XML parser
+
+]>
&xxe;
+
+# Unwanted Interpolation
+#
+# Strings which can be accidentally expanded into different strings if evaluated in the wrong context, e.g. used as a printf format string or via Perl or shell eval. Might expose sensitive data from the program doing the interpolation, or might just represent the wrong string.
+
+$HOME
+$ENV{'HOME'}
+%d
+%s%s%s%s%s
+{0}
+%*.*s
+%@
+%n
+File:///
+
+# File Inclusion
+#
+# Strings which can cause user to pull in files that should not be a part of a web server
+
+../../../../../../../../../../../etc/passwd%00
+../../../../../../../../../../../etc/hosts
+
+# Known CVEs and Vulnerabilities
+#
+# Strings that test for known vulnerabilities
+
+() { 0; }; touch /tmp/blns.shellshock1.fail;
+() { _; } >_[$($())] { touch /tmp/blns.shellshock2.fail; }
+<<< %s(un='%s') = %u
++++ATH0
+
+# MSDOS/Windows Special Filenames
+#
+# Strings which are reserved characters in MSDOS/Windows
+
+CON
+PRN
+AUX
+CLOCK$
+NUL
+A:
+ZZ:
+COM1
+LPT1
+LPT2
+LPT3
+COM2
+COM3
+COM4
+
+# IRC specific strings
+#
+# Strings that may occur on IRC clients that make security products freak out
+
+DCC SEND STARTKEYLOGGER 0 0 0
+
+# Scunthorpe Problem
+#
+# Innocuous strings which may be blocked by profanity filters (https://en.wikipedia.org/wiki/Scunthorpe_problem)
+
+Scunthorpe General Hospital
+Penistone Community Church
+Lightwater Country Park
+Jimmy Clitheroe
+Horniman Museum
+shitake mushrooms
+RomansInSussex.co.uk
+http://www.cum.qc.ca/
+Craig Cockburn, Software Specialist
+Linda Callahan
+Dr. Herman I. Libshitz
+magna cum laude
+Super Bowl XXX
+medieval erection of parapets
+evaluate
+mocha
+expression
+Arsenal canal
+classic
+Tyson Gay
+Dick Van Dyke
+basement
+
+# Human injection
+#
+# Strings which may cause human to reinterpret worldview
+
+If you're reading this, you've been in a coma for almost 20 years now. We're trying a new technique. We don't know where this message will end up in your dream, but we hope it works. Please wake up, we miss you.
+
+# Terminal escape codes
+#
+# Strings which punish the fools who use cat/type on this file
+
+Roses are [0;31mred[0m, violets are [0;34mblue. Hope you enjoy terminal hue
+But now...[20Cfor my greatest trick...[8m
+The quick brown fox... [Beeeep]
+
+# iOS Vulnerabilities
+#
+# Strings which crashed iMessage in various versions of iOS
+
+Powerلُلُصّبُلُلصّبُررً ॣ ॣh ॣ ॣ冗
+🏳0🌈️
+జ్ఞా
+
+# Persian special characters
+#
+# This is a four characters string which includes Persian special characters (گچپژ)
+
+گچپژ
+
+# jinja2 injection
+#
+# first one is supposed to raise "MemoryError" exception
+# second, obviously, prints contents of /etc/passwd
+
+{% print 'x' * 64 * 1024**3 %}
+{{ "".__class__.__mro__[2].__subclasses__()[40]("/etc/passwd").read() }}
diff --git a/extension/blns/src/main/resources/blns_LICENSE.txt b/extension/blns/src/main/resources/blns_LICENSE.txt
new file mode 100644
index 000000000..0eda15e1e
--- /dev/null
+++ b/extension/blns/src/main/resources/blns_LICENSE.txt
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015-2020 Max Woolf
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/extension/blns/src/main/resources/blns_categories.json b/extension/blns/src/main/resources/blns_categories.json
new file mode 100644
index 000000000..bedbc1095
--- /dev/null
+++ b/extension/blns/src/main/resources/blns_categories.json
@@ -0,0 +1,599 @@
+{
+ "reserved": [
+ "",
+ "undefined",
+ "undef",
+ "null",
+ "NULL",
+ "(null)",
+ "nil",
+ "NIL",
+ "true",
+ "false",
+ "True",
+ "False",
+ "TRUE",
+ "FALSE",
+ "None",
+ "hasOwnProperty",
+ "then",
+ "\\",
+ "\\\\"
+ ],
+ "numeric": [
+ "0",
+ "1",
+ "1.00",
+ "$1.00",
+ "1/2",
+ "1E2",
+ "1E02",
+ "1E+02",
+ "-1",
+ "-1.00",
+ "-$1.00",
+ "-1/2",
+ "-1E2",
+ "-1E02",
+ "-1E+02",
+ "1/0",
+ "0/0",
+ "-2147483648/-1",
+ "-9223372036854775808/-1",
+ "-0",
+ "-0.0",
+ "+0",
+ "+0.0",
+ "0.00",
+ "0..0",
+ ".",
+ "0.0.0",
+ "0,00",
+ "0,,0",
+ ",",
+ "0,0,0",
+ "0.0/0",
+ "1.0/0.0",
+ "0.0/0.0",
+ "1,0/0,0",
+ "0,0/0,0",
+ "--1",
+ "-",
+ "-.",
+ "-,",
+ "999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999",
+ "NaN",
+ "Infinity",
+ "-Infinity",
+ "INF",
+ "1#INF",
+ "-1#IND",
+ "1#QNAN",
+ "1#SNAN",
+ "1#IND",
+ "0x0",
+ "0xffffffff",
+ "0xffffffffffffffff",
+ "0xabad1dea",
+ "123456789012345678901234567890123456789",
+ "1,000.00",
+ "1 000.00",
+ "1'000.00",
+ "1,000,000.00",
+ "1 000 000.00",
+ "1'000'000.00",
+ "1.000,00",
+ "1 000,00",
+ "1'000,00",
+ "1.000.000,00",
+ "1 000 000,00",
+ "1'000'000,00",
+ "01000",
+ "08",
+ "09",
+ "2.2250738585072011e-308"
+ ],
+ "special": [
+ ",./;'[]\\-=",
+ "<>?:\"{}|_+",
+ "!@#$%^&*()`~"
+ ],
+ "c0_controls": [
+ "\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f"
+ ],
+ "c1_controls": [
+ ""
+ ],
+ "whitespace": [
+ "\t\u000b\f
"
+ ],
+ "unicode_additional_control": [
+ ""
+ ],
+ "byte_order_marks": [
+ "",
+ ""
+ ],
+ "unicode_symbols": [
+ "Ω≈ç√∫˜µ≤≥÷",
+ "åß∂ƒ©˙∆˚¬…æ",
+ "œ∑´®†¥¨ˆøπ“‘",
+ "¡™£¢∞§¶•ªº–≠",
+ "¸˛Ç◊ı˜Â¯˘¿",
+ "ÅÍÎÏ˝ÓÔÒÚÆ☃",
+ "Œ„´‰ˇÁ¨ˆØ∏”’",
+ "`⁄€‹›fifl‡°·‚—±",
+ "⅛⅜⅝⅞",
+ "ЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюя",
+ "٠١٢٣٤٥٦٧٨٩"
+ ],
+ "unicode_accents": [
+ "⁰⁴⁵",
+ "₀₁₂",
+ "⁰⁴⁵₀₁₂",
+ "ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็ ด้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็็้้้้้้้้็็็็็้้้้้็็็็"
+ ],
+ "quotation_marks": [
+ "'",
+ "\"",
+ "''",
+ "\"\"",
+ "'\"'",
+ "\"''''\"'\"",
+ "\"'\"'\"''''\"",
+ "
",
+ "
",
+ "
",
+ "
"
+ ],
+ "two_byte_chars": [
+ "田中さんにあげて下さい",
+ "パーティーへ行かないか",
+ "和製漢語",
+ "部落格",
+ "사회과학원 어학연구소",
+ "찦차를 타고 온 펲시맨과 쑛다리 똠방각하",
+ "社會科學院語學研究所",
+ "울란바토르",
+ "𠜎𠜱𠝹𠱓𠱸𠲖𠳏"
+ ],
+ "two_byte_letters": [
+ "𐐜 𐐔𐐇𐐝𐐀𐐡𐐇𐐓 𐐙𐐊𐐡𐐝𐐓/𐐝𐐇𐐗𐐊𐐤𐐔 𐐒𐐋𐐗 𐐒𐐌 𐐜 𐐡𐐀𐐖𐐇𐐤𐐓𐐝 𐐱𐑂 𐑄 𐐔𐐇𐐝𐐀𐐡𐐇𐐓 𐐏𐐆𐐅𐐤𐐆𐐚𐐊𐐡𐐝𐐆𐐓𐐆"
+ ],
+ "unicode_special_char_union": [
+ "表ポあA鷗ŒéB逍Üߪąñ丂㐀𠀀"
+ ],
+ "variable_case_length": [
+ "Ⱥ",
+ "Ⱦ"
+ ],
+ "kaomoji": [
+ "ヽ༼ຈل͜ຈ༽ノ ヽ༼ຈل͜ຈ༽ノ",
+ "(。◕ ∀ ◕。)",
+ "`ィ(´∀`∩",
+ "__ロ(,_,*)",
+ "・( ̄∀ ̄)・:*:",
+ "゚・✿ヾ╲(。◕‿◕。)╱✿・゚",
+ ",。・:*:・゜’( ☻ ω ☻ )。・:*:・゜’",
+ "(╯°□°)╯︵ ┻━┻)",
+ "(ノಥ益ಥ)ノ ┻━┻",
+ "┬─┬ノ( º _ ºノ)",
+ "( ͡° ͜ʖ ͡°)",
+ "¯\\_(ツ)_/¯"
+ ],
+ "emoji": [
+ "😍",
+ "👩🏽",
+ "👨🦰 👨🏿🦰 👨🦱 👨🏿🦱 🦹🏿♂️",
+ "👾 🙇 💁 🙅 🙆 🙋 🙎 🙍",
+ "🐵 🙈 🙉 🙊",
+ "❤️ 💔 💌 💕 💞 💓 💗 💖 💘 💝 💟 💜 💛 💚 💙",
+ "✋🏿 💪🏿 👐🏿 🙌🏿 👏🏿 🙏🏿",
+ "👨👩👦 👨👩👧👦 👨👨👦 👩👩👧 👨👦 👨👧👦 👩👦 👩👧👦",
+ "🚾 🆒 🆓 🆕 🆖 🆗 🆙 🏧",
+ "0️⃣ 1️⃣ 2️⃣ 3️⃣ 4️⃣ 5️⃣ 6️⃣ 7️⃣ 8️⃣ 9️⃣ 🔟",
+ "🇺🇸🇷🇺🇸 🇦🇫🇦🇲🇸"
+ ],
+ "regional_symbols": [
+ "🇺🇸🇷🇺🇸🇦🇫🇦🇲",
+ "🇺🇸🇷🇺🇸🇦"
+ ],
+ "unicode_numbers": [
+ "123",
+ "١٢٣"
+ ],
+ "right_to_left_strings": [
+ "ثم نفس سقطت وبالتحديد،, جزيرتي باستخدام أن دنو. إذ هنا؟ الستار وتنصيب كان. أهّل ايطاليا، بريطانيا-فرنسا قد أخذ. سليمان، إتفاقية بين ما, يذكر الحدود أي بعد, معاملة بولندا، الإطلاق عل إيو.",
+ "בְּרֵאשִׁית, בָּרָא אֱלֹהִים, אֵת הַשָּׁמַיִם, וְאֵת הָאָרֶץ",
+ "הָיְתָהtestالصفحات التّحول",
+ "﷽",
+ "ﷺ",
+ "مُنَاقَشَةُ سُبُلِ اِسْتِخْدَامِ اللُّغَةِ فِي النُّظُمِ الْقَائِمَةِ وَفِيم يَخُصَّ التَّطْبِيقَاتُ الْحاسُوبِيَّةُ، "
+ ],
+ "ogham_text": [
+ "᚛ᚄᚓᚐᚋᚒᚄ ᚑᚄᚂᚑᚏᚅ᚜",
+ "᚛ ᚜"
+ ],
+ "unicode_tricks": [
+ "test",
+ "test",
+ "
test
",
+ "testtest",
+ "test"
+ ],
+ "zalgo_text": [
+ "Ṱ̺̺̕o͞ ̷i̲̬͇̪͙n̝̗͕v̟̜̘̦͟o̶̙̰̠kè͚̮̺̪̹̱̤ ̖t̝͕̳̣̻̪͞h̼͓̲̦̳̘̲e͇̣̰̦̬͎ ̢̼̻̱̘h͚͎͙̜̣̲ͅi̦̲̣̰̤v̻͍e̺̭̳̪̰-m̢iͅn̖̺̞̲̯̰d̵̼̟͙̩̼̘̳ ̞̥̱̳̭r̛̗̘e͙p͠r̼̞̻̭̗e̺̠̣͟s̘͇̳͍̝͉e͉̥̯̞̲͚̬͜ǹ̬͎͎̟̖͇̤t͍̬̤͓̼̭͘ͅi̪̱n͠g̴͉ ͏͉ͅc̬̟h͡a̫̻̯͘o̫̟̖͍̙̝͉s̗̦̲.̨̹͈̣",
+ "̡͓̞ͅI̗̘̦͝n͇͇͙v̮̫ok̲̫̙͈i̖͙̭̹̠̞n̡̻̮̣̺g̲͈͙̭͙̬͎ ̰t͔̦h̞̲e̢̤ ͍̬̲͖f̴̘͕̣è͖ẹ̥̩l͖͔͚i͓͚̦͠n͖͍̗͓̳̮g͍ ̨o͚̪͡f̘̣̬ ̖̘͖̟͙̮c҉͔̫͖͓͇͖ͅh̵̤̣͚͔á̗̼͕ͅo̼̣̥s̱͈̺̖̦̻͢.̛̖̞̠̫̰",
+ "̗̺͖̹̯͓Ṯ̤͍̥͇͈h̲́e͏͓̼̗̙̼̣͔ ͇̜̱̠͓͍ͅN͕͠e̗̱z̘̝̜̺͙p̤̺̹͍̯͚e̠̻̠͜r̨̤͍̺̖͔̖̖d̠̟̭̬̝͟i̦͖̩͓͔̤a̠̗̬͉̙n͚͜ ̻̞̰͚ͅh̵͉i̳̞v̢͇ḙ͎͟-҉̭̩̼͔m̤̭̫i͕͇̝̦n̗͙ḍ̟ ̯̲͕͞ǫ̟̯̰̲͙̻̝f ̪̰̰̗̖̭̘͘c̦͍̲̞͍̩̙ḥ͚a̮͎̟̙͜ơ̩̹͎s̤.̝̝ ҉Z̡̖̜͖̰̣͉̜a͖̰͙̬͡l̲̫̳͍̩g̡̟̼̱͚̞̬ͅo̗͜.̟",
+ "̦H̬̤̗̤͝e͜ ̜̥̝̻͍̟́w̕h̖̯͓o̝͙̖͎̱̮ ҉̺̙̞̟͈W̷̼̭a̺̪͍į͈͕̭͙̯̜t̶̼̮s̘͙͖̕ ̠̫̠B̻͍͙͉̳ͅe̵h̵̬͇̫͙i̹͓̳̳̮͎̫̕n͟d̴̪̜̖ ̰͉̩͇͙̲͞ͅT͖̼͓̪͢h͏͓̮̻e̬̝̟ͅ ̤̹̝W͙̞̝͔͇͝ͅa͏͓͔̹̼̣l̴͔̰̤̟͔ḽ̫.͕",
+ "Z̮̞̠͙͔ͅḀ̗̞͈̻̗Ḷ͙͎̯̹̞͓G̻O̭̗̮"
+ ],
+ "unicode_upside_down": [
+ "˙ɐnbᴉlɐ ɐuƃɐɯ ǝɹolop ʇǝ ǝɹoqɐl ʇn ʇunpᴉpᴉɔuᴉ ɹodɯǝʇ poɯsnᴉǝ op pǝs 'ʇᴉlǝ ƃuᴉɔsᴉdᴉpɐ ɹnʇǝʇɔǝsuoɔ 'ʇǝɯɐ ʇᴉs ɹolop ɯnsdᴉ ɯǝɹo˥",
+ "00˙Ɩ$-"
+ ],
+ "unicode_font": [
+ "The quick brown fox jumps over the lazy dog",
+ "𝐓𝐡𝐞 𝐪𝐮𝐢𝐜𝐤 𝐛𝐫𝐨𝐰𝐧 𝐟𝐨𝐱 𝐣𝐮𝐦𝐩𝐬 𝐨𝐯𝐞𝐫 𝐭𝐡𝐞 𝐥𝐚𝐳𝐲 𝐝𝐨𝐠",
+ "𝕿𝖍𝖊 𝖖𝖚𝖎𝖈𝖐 𝖇𝖗𝖔𝖜𝖓 𝖋𝖔𝖝 𝖏𝖚𝖒𝖕𝖘 𝖔𝖛𝖊𝖗 𝖙𝖍𝖊 𝖑𝖆𝖟𝖞 𝖉𝖔𝖌",
+ "𝑻𝒉𝒆 𝒒𝒖𝒊𝒄𝒌 𝒃𝒓𝒐𝒘𝒏 𝒇𝒐𝒙 𝒋𝒖𝒎𝒑𝒔 𝒐𝒗𝒆𝒓 𝒕𝒉𝒆 𝒍𝒂𝒛𝒚 𝒅𝒐𝒈",
+ "𝓣𝓱𝓮 𝓺𝓾𝓲𝓬𝓴 𝓫𝓻𝓸𝔀𝓷 𝓯𝓸𝔁 𝓳𝓾𝓶𝓹𝓼 𝓸𝓿𝓮𝓻 𝓽𝓱𝓮 𝓵𝓪𝔃𝔂 𝓭𝓸𝓰",
+ "𝕋𝕙𝕖 𝕢𝕦𝕚𝕔𝕜 𝕓𝕣𝕠𝕨𝕟 𝕗𝕠𝕩 𝕛𝕦𝕞𝕡𝕤 𝕠𝕧𝕖𝕣 𝕥𝕙𝕖 𝕝𝕒𝕫𝕪 𝕕𝕠𝕘",
+ "𝚃𝚑𝚎 𝚚𝚞𝚒𝚌𝚔 𝚋𝚛𝚘𝚠𝚗 𝚏𝚘𝚡 𝚓𝚞𝚖𝚙𝚜 𝚘𝚟𝚎𝚛 𝚝𝚑𝚎 𝚕𝚊𝚣𝚢 𝚍𝚘𝚐",
+ "⒯⒣⒠ ⒬⒰⒤⒞⒦ ⒝⒭⒪⒲⒩ ⒡⒪⒳ ⒥⒰⒨⒫⒮ ⒪⒱⒠⒭ ⒯⒣⒠ ⒧⒜⒵⒴ ⒟⒪⒢"
+ ],
+ "script_injection": [
+ "",
+ "<script>alert('123');</script>",
+ "
",
+ "