是否有本地PHP函数用于拒绝来自简单文本字段的无效$_POST数据?
目前,我在正则表达式中使用自定义过滤函数,如果可能的话,我真的很想简化我的代码。
例如,假设我有一个用于输入姓氏的表单字段。我想检查提交的值,如果它包含任何无效字符,则立即拒绝输入。
以下是我考虑PHP函数的标准:
-
一个人的姓氏可能是"Smith Johnson"、"Van Buren"、"O'Malley"等,因此函数需要允许空格、连字符、撇号等。
-
我的目标是测试输入并立即拒绝它,而不是对它进行净化并通过额外的过滤器和处理步骤运行它。
-
我想捕捉的两个输入示例是:
username' -- username; DELETE FROM users;
以下是我知道的选项,以及为什么我对使用它们心存疑虑。。。
-
is_string():此函数似乎无法捕获上面的两个示例中的任何一个
-
addslashes():此函数不符合的第二个标准
-
htmlenties(),htmlspecialchar():与addslashes()相同;如果输入无效,我不想继续使用它,即使它是经过消毒的
-
strip_tags():不符合第二个标准,但优于#3,因为它消除了不需要的字符,而不是清除它们
-
filter_put(…filter_ANITIZE_STRING):据我所知,这与strip_tags()相同。**
-
ctype_alpha(),ctype_alnum():由于不允许使用空格和其他字符,因此不符合第一个条件。
-
Regex/Custom函数:这是我一直在使用的函数。我真的更喜欢简化我的代码并消除(尽管是最小的)regex开销。
--
**只是好奇:PECL是否使filter_put()比strip_tags()更快?
没有这样的函数。你基本上是在问,当一个字符串和另一个字符串都是具有复杂条件的字符串时,如何区分它们。对于"原生"函数来说,这是一项相当模糊的任务。
实现这一点的最"原生"的方法是使用正则表达式,而这正是您已经在做的。
这也违反了意识形态,因为$_POST和$_GET应该以其原始形式表示参数,而不是在通过一些验证之后。
我总是使用正则表达式来验证表单输入。如果你感兴趣的话,我有一整套表单验证和创建功能,这些功能是我多年来开发的。