验证使用它们的函数的$ _POST变量

时间:2013-03-20 11:36:33

标签: php post

我的许多带有用户数据的函数都通过post而不是GET接收它们,即将它们传递到url中,例如'class / method / param1 / param2'。

我想知道在处理POST数据的函数中创建一个首先调用的静态函数是否是一个好主意?即:

public function myMethod()
{
    Util::validatePost();
}

...

public static function validatePost()
{
    foreach($_POST as $param => $value){
      // Do some validation stuff...
    }
}
...

一个示例规则是,任何键名称包含'id'的POST变量必须是数字,如果是其他任何内容则失败。

4 个答案:

答案 0 :(得分:1)

许多PHP框架都是这样做的(Symfony2只是一个例子)。

他们使用一些验证规则和输入转义工具,以验证用户输入,所以,是的,不要信任用户发送给你的所有内容,但是你可以做的就是验证输入。

此外,静态函数(或许多静态函数)将与单个(或许多)形式耦合。我建议你为每个需要验证的表格(或一般数据)实现一个特定的功能

请注意

不要信任HTML5或JavaScript约束,因为它们很容易被绕过。正如我在评论中建议的那样,在“最后一步”控制用户输入(即用模型或表格绑定数据,或其他)

答案 1 :(得分:0)

我认为这不是一个好主意,原因有很多,例如:

  • 它会在代码和空间之间产生强烈的依赖关系,以防止错误和调试痛苦。
  • 特别是php对于类型转换很棘手。请记住,每个post变量最初都以String形式出现。也
  • 所需的验证类型总是取决于使用情况。如果你突然在某个地方有字符串ID会怎么样?

当然可以进行一些验证。用于exmaple的PHP模块suhosin(AKA hardened php)可以防止攻击。

但根据我的经验,最好在处理用户数据时对其进行清理。

例如,我总是将引用应用于我在数据库查询中使用的数据。 Alawys,就在构建查询之前。

我从不首先依赖数据安全。

在任何情况下,您都不应该信任外部来源提供的任何数据。

当你这样做时,Alwas会对你做的事情进行验证,你会没事的。

答案 2 :(得分:0)

我认为这是一个坏主意。虽然这一开始可能效果很好但它要求你一直非常严格,从expierence我已经知道你总是会得到必须是数字的变量,但不能用ID字段命名。

此外,您可能需要更多验证(例如有效的电子邮件,电子邮件地址,邮政编码或有效的guid)。

最后,你仍然需要验证每个参数,然后才能使用它,所以这似乎毫无用处。

答案 3 :(得分:0)

这是一个好主意。更一般地说,你不能相信来自客户的任何东西,所以检查/验证它总是一个好主意。

我建议您使用一些PHP库来轻松处理HTTP请求。试试这个Symfony组件,例如: https://github.com/symfony/HttpKernel