我不想太严格,因为可能的名字中可能有数千个可能的字符
普通英文字母,重音字母,非英文字母,数字(??),普通标点符号
e.g。
D'souza
D'Anza
M.D. Shah (dots and space)
Al-Rashid
Jatin "Tom" Shah
但是,我不想除了HTML标签,分号等
是否存在从Web应用程序角度来看绝对不好的此类字符列表
然后我可以使用RegEx将这些字符列入黑名单
我的申请背景
这是一个基于Java Servlet-JSP的Web应用程序。 Linux上的Tomcat与MySQL(有时候是MongoDB)作为后端
到目前为止我尝试了什么
String regex = "[^<>~@#$%;]*";
if(!fname.matches(regex))
throw new InputValidationException("Invalid FirstName")
我的问题更多的是关于设计而不是编码...我正在寻找一个详尽无遗(很好的详尽程度)字符列表,我应该列入黑名单
答案 0 :(得分:0)
更好的方法是接受任何人想要输入的内容,然后在可能导致问题的上下文中转义任何有问题的字符。
例如,没有理由禁止人们在他们的名字中使用<i>
(尽管它可能不太可能是一个合法的名字),并且它只会在你生成时造成潜在的问题(XSS)适用于您的用户的HTML。类似地,禁止引号,分号等仅在其他场景(SQL查询等)中有意义。如果规则在不同的地方有所不同并且你想要清理输入,那么你需要在同一个地方的所有规则(那些空格呢?你是否需要创建文件名,包括用户的名字?如果所以,也许你必须将它添加到黑名单中。)
假设你至少在一个案例中弄错了:也许你第一次实施时没有考虑过,所以你回去把新项目添加到你的黑名单中。您仍然拥有已注册受污染数据的用户。因此,您可以运行整个数据库清理数据(可能需要长时间非常 非常 ),或者您可以执行此操作无论如何你真正需要做的事情:清理当前媒体的数据。这样,您只需要在相关点管理清理(无需保护HTML输出免受SQL注入攻击)和它将适用于您的所有数据,而不仅仅是您实施后收集的数据你的黑名单。