Несколько лет назад я использовал java-класс, который добавил для меня регулярное выражение вроде этого:
(.(?<!<|%3c|<))*
Это было вычислено следующим образом:
String[] EVIL_WORDS = { "<", "%3C", "<", "<", "PA==",
">", "%3E", ">", ">", "Pg==",
"&", "%26", "&", "&", "Jg==",
"\"", "%22", """, """, "Ig==",
"'", "%27", "'", "'", "Jw=="};
StringBuffer buffer = new StringBuffer();
buffer.append("(.")
if(EVIL_WORDS.length > 0) {
buffer.append("(?<!");
buffer.append(EVIL_WORDS[0]);
for (int i = 1; i < EVIL_WORDS.length; i++) {
buffer.append('|');
buffer.append(EVIL_WORDS[i]);
} //for
buffer.append(')');
}//if
buffer.append(')*');
Если шаблон не соответствует, обнаружен плохой символ.
Сценарий произвел оригинальное регулярное выражение и сделал проверки длины, SQL-инъекций и многих других вещей, но эти времена прошли. С защитой Grails и XSS и защитой от впрыскивания Hibernates SQL я больше не пользуюсь.
Но я рад, что смог бы вам помочь.