2012-06-07 53 views
0

我不想太严格,因为可能有成千上万的可能的字符在可能的名字在Web应用程序验证姓

普通英文字母,重音字母,非英文字母,数字(??) ,常见的标点符号synpols

eg

D'souza 
D'Anza 
M.D. Shah (dots and space) 
Al-Rashid 
Jatin "Tom" Shah 

不过,我并不想除了HTML标签,分号等

是否有这样一组字符这是绝对不好的从Web应用的角度

然后我可以使用正则表达式来黑名单这些字符

背景上我的应用程序

这是一个基于Java Servlet-JSP的Web应用程序。 的Tomcat在Linux上使用MySQL(和有时的MongoDB)作为后端

我至今

String regex = "[^<>[email protected]#$%;]*"; 
if(!fname.matches(regex)) 
    throw new InputValidationException("Invalid FirstName") 

我的问题是更多的设计比编码...我要寻找一个尝试详尽的(也有一个良好的程度全面性的)字符的名单,我应该黑名单

+0

什么语言?什么平台?没有更多的上下文,“Web应用程序”是相当无意义的。 – Oded

+0

它是一个Java(servlet-JSP)平台... Linux上使用MySQL作为后端的Tomcat(偶尔使用mongoDB) – jsshah

+0

然后使用标签。你最多有5个,你知道吗? – Oded

回答

0

一个更好的方法是接受任何人想进入,然后逃跑的背景下,任何有问题的人物,他们可能会导致问题。

例如,没有理由禁止人们在他们的名字中使用<i>(尽管它可能不太可能是一个合法的名字),并且它只会在您为您生成HTML时带来潜在的问题(XSS)用户。同样,不允许引号,分号等在其他场景(SQL查询等)中才有意义。如果规则是在不同的地方不同的,要净化输入,那么你需要在同一个地方的所有规则(怎么样空格?你锣创建文件名,包括用户的名字?如果是这样,也许你”必须将其添加到黑名单中)。

假设您至少在一种情况下会出错:也许您在第一次执行时没有考虑到某些问题,因此您可以返回并将新项目添加到您的黑名单中。您仍然有已经注册受污染数据的用户。因此,您可以运行整个数据库来清理数据(这可能需要很长时间才能完成),或者您只需执行以下操作即可:清理数据,因为数据正在呈现为当前媒体。这样一来,你只需要在相关点来管理消毒(不需要防止SQL注入攻击HTML输出)它会为您的所有数据,你实现你的黑名单后,您收集不仅仅是数据的工作。