我在Javascript和PHP方面都有以下正则表达式:^[a-zA-Z](.*)[a-zA-Z]$
,我用它来验证一个人的姓名和消息字段联系表(没有数据库交互)。它基本上确保字段中的第一个和最后一个字符是字母表,并允许其间的任何其他字符。
我担心的是:
这些有效的顾虑吗?如果我开始迎合所有类型的Name和Message场景,我将最终得到一个很长的表达式,这将难以维护......所以它真的值得,或者是否有一个极小的正则表达式我应该用这两个字段来防止恶意攻击/脚本编写?
(PS - 我的一位同事刚刚提醒我注意名字以“!”开头)
谢谢!!
答案 0 :(得分:2)
现在名为DieterVoß的人不能再使用您的联系表格了。那很糟糕。
如果您没有任何数据库交互,并且数据通过电子邮件等发送给某人(而不是在网络上公开显示),那么保护自己不会有太大的安全问题。我建议根本不做任何检查。 (除非字段是否为空。)
免责声明:在不了解其余代码的情况下,任何有关可能的安全隐患的陈述都可能是错误的。
答案 1 :(得分:2)
- 对于此类功能,我是否应该为尝试验证某人的姓名或消息而烦恼?我唯一能够验证或者防范的是任何恶意输入。
醇>
防止恶意输入不同于验证某人的姓名确实是一个人的姓名。因为人们的名字可以如此多变(包含各种各样的字符),所以最好只确保其中至少有一个非空白字符,并用它来完成。有些人只有一个名字,有些人的姓氏只有一个字母。
- 我不确定哪些类型的攻击可以让我的网站开放,如果我唯一要做的就是检查字段是否为空。
醇>
防止恶意输入是一个不同的问题,它涉及例如在将条目输入数据库之前对其进行过滤,但这可能(可能)是您的数据库抽象或框架的工作。
您还必须确保无论何时在HTML页面中输出此类数据,都要在其上使用htmlspecialchars()
。这可以防止跨站点脚本(将HTML标记包含在纯文本中)。这(可能)是您的模板系统或视图层的工作。