1

我有以下正则表达式:^[a-zA-Z](.*)[a-zA-Z]$在 Javascript 和 PHP 端,我一直在使用它来验证联系人表单上的人名消息字段(无数据库交互)。它基本上确保字段中的第一个和最后一个字符是字母,并允许介于两者之间的任何其他字符。

我的担忧是:

  1. 对于这种类型的功能,我是否应该为尝试验证一个人的姓名或消息而烦恼?我唯一要验证或更确切地说要防止的是任何恶意输入。
  2. 如果我唯一要做的就是检查这些字段是否为空,我不确定我可以让我的网站对哪种类型的攻击开放。

这些是有效的担忧吗?如果我开始满足所有类型的名称和消息场景,我将得到一个非常长的表达式,这将变得难以维护......那么它真的值得吗,或者是否有一个最低限度的正则表达式我应该使用这两个字段来防止恶意攻击/脚本?

(PS - 我的一位同事刚刚提醒我名字以“ ”开头)

谢谢你!!

4

2 回答 2

2

现在,一个名叫Dieter Voß的人不能再使用您的联系表了。那很糟。

如果您没有任何数据库交互,并且数据通过电子邮件或类似方式发送给某人(而不是在 Web 上公开显示),那么就没有太多的安全问题可以保护您自己。我建议根本不检查。(除了字段是否为空。)

免责声明:在不了解其余代码的情况下,任何有关可能的安全隐患的陈述都可能是错误的。

于 2010-08-11T23:06:25.193 回答
2
  1. 对于这种类型的功能,我是否应该为尝试验证一个人的姓名或消息而烦恼?我唯一要验证或更确切地说要防止的是任何恶意输入。

防止恶意输入与验证一个人的名字确实是一个人的名字是不同的。因为人们的名字可以如此多样化(包含各种字符),所以最好确保其中至少有一个非空白字符并完成它。有些人只有一个名字,有些人的姓氏只有一个字母。

  1. 如果我唯一要做的就是检查这些字段是否为空,我不确定我可以让我的网站对哪种类型的攻击开放。

防止恶意输入是一个不同的问题,它涉及例如在条目进入数据库之前过滤条目,但这(可能)是您的数据库抽象或框架的工作。

您还必须确保无论何时将此类数据作为 HTML 页面的一部分输出,都可以htmlspecialchars()在其上使用。这可以防止跨站点脚本(在纯文本中包含 HTML 标记)。这(可能)是您的模板系统或视图层的工作。

于 2010-08-11T23:16:12.923 回答