Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于过滤常用文本字段的PHP本机函数_Php_Security_Input_Filtering - Fatal编程技术网

用于过滤常用文本字段的PHP本机函数

用于过滤常用文本字段的PHP本机函数,php,security,input,filtering,Php,Security,Input,Filtering,是否有一个本机PHP函数用于拒绝来自简单文本字段的无效$u POST数据 目前,我正在使用带有正则表达式的自定义筛选函数,如果可能的话,我真的很想简化我的代码 例如,假设我有一个表单字段,用于输入姓氏。我希望检查提交的值,如果输入包含任何无效字符,则立即拒绝输入 以下是我考虑PHP函数的标准: 一个人的姓可能是“Smith Johnson”、“Van Buren”、“O'Malley”等,因此函数需要允许空格、连字符、撇号等 我的目标是测试输入并立即拒绝它,而不是对其进行消毒并通过附加的过滤器

是否有一个本机PHP函数用于拒绝来自简单文本字段的无效$u POST数据

目前,我正在使用带有正则表达式的自定义筛选函数,如果可能的话,我真的很想简化我的代码

例如,假设我有一个表单字段,用于输入姓氏。我希望检查提交的值,如果输入包含任何无效字符,则立即拒绝输入

以下是我考虑PHP函数的标准:

  • 一个人的姓可能是“Smith Johnson”、“Van Buren”、“O'Malley”等,因此函数需要允许空格、连字符、撇号等

  • 我的目标是测试输入并立即拒绝它,而不是对其进行消毒并通过附加的过滤器和处理步骤来运行它

  • 我想捕捉的两个输入示例是:

    username' --
    username; DELETE FROM users;
    
以下是我知道的选项,以及为什么我对使用它们有疑问

  • is_string():此函数似乎无法捕获上述两个示例中的任何一个

  • addslashes():此函数不符合第二个条件

  • htmlspecialchars(),htmlspecialchars():与addslashes()相同;如果输入无效,我不想继续使用它,即使它已被消毒

  • strip_tags():不符合第二个标准,但优于#3,因为它消除了不需要的字符,而不是对它们进行清理

  • 过滤\u输入(…过滤\u清理\u字符串):据我所知,这与strip\u标记()相同**

  • ctype_alpha(),ctype_alnum():不符合第一个条件,因为它不允许空格和其他字符

  • 正则表达式/自定义函数:这就是我一直在使用的函数。我真的更愿意简化我的代码并消除(尽管是最小的)正则表达式开销

  • --


    **只是好奇:PECL是否使filter_input()比strip_tags()更快?

    我总是使用正则表达式来验证表单输入。如果您感兴趣,我有一整套表单验证和创建功能,这些功能是我多年来开发的。

    没有这样的功能。你问的基本上是如何区分一个字符串和另一个字符串,而它们都是具有复杂条件的字符串。对于“本机”函数来说,这是一个相当模糊的任务

    实现这一点最“自然”的方法是使用正则表达式,而这正是您已经在做的事情


    这也违反了意识形态,因为$\u POST和$\u GET应该以原始形式表示参数,而不是在通过一些验证之后。

    使用PDO和占位符来正确防止SQL注入。对于XSS注入,我倾向于使用htmlentities,除非我想支持一些HTML标记。在这种情况下,我使用HTML解析器创建了一个允许标记的过滤器。使用正确的编码,一切都很好。谢谢-我同意这两个最佳实践,并将它们应用到我的代码中。我感兴趣的是在准备查询或输出之前拒绝输入。