0

我不想太严格,因为可能的名字中可能有数千个可能的字符

普通英文字母、重音字母、非英文字母、数字(??)、常用标点符号

例如

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

但是,我不想除了 HTML 标签、分号等

从 Web 应用程序的角度来看,是否有这样的字符列表绝对不好

然后我可以使用 RegEx 将这些字符列入黑名单

我的申请背景

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

到目前为止我尝试过的

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

我的问题更多是关于设计而不是编码......我正在寻找一个详尽的(非常详尽的)我应该列入黑名单的字符列表

4

1 回答 1

0

更好的方法是接受任何人想要输入的任何内容,然后在可能导致问题的上下文中转义任何有问题的字符。

例如,没有理由禁止人们<i>在他们的名字中使用(尽管它可能极不可能是一个合法的名字),而且它只会在您为用户生成 HTML 时造成潜在的问题 (XSS)。同样,禁止引号、分号等仅在其他场景(SQL 查询等)中才有意义。如果不同地方的规则不同,并且您想清理输入,那么您需要将所有规则放在同一个地方(空格呢?您是否要创建包含用户名字的文件名?如果是这样,也许您会有将其添加到黑名单)。

假设您至少在一种情况下会出错:也许您在第一次实施时没有考虑到某些事情,所以您返回并将新项目添加到您的黑名单中。您仍然有已注册受污染数据的用户。因此,您可以运行整个数据库以清理数据(这可能需要 长时间),或者您可以做您真正必须做的事情:清理当前媒体中呈现的数据。这样,您只需管理相关点的清理(无需保护 HTML 输出免受 SQL 注入攻击)它将适用于您的所有数据,而不仅仅是您在实施黑名单后收集的数据。

于 2012-06-11T18:56:46.993 回答