0

我的许多获取用户数据的函数都是通过 post 而不是 GET 接收它们,即在 url 中传递它们,例如“class/method/param1/param2”。

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

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

...

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

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

4

4 回答 4

1

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

他们使用一些验证规则和输入转义工具来验证用户输入,所以,是的,不要相信用户发送给你的所有内容,而是尽你所能来验证输入。

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

请注意

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

于 2013-03-20T11:38:53.077 回答
0

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

  • 它在代码和错误空间和调试痛苦之间产生了强烈的依赖关系。
  • 特别是 php 在类型转换方面很棘手。请记住,每个 post 变量最初都是作为字符串到达​​的。还
  • 所需的验证类型始终取决于使用情况。如果你突然在某个地方有字符串 ID 怎么办?

当然,可以进行一些验证。例如 PHP 模块 suhosin (AKA hardened php) 是为了防止攻击。

但是,根据我的经验,在处理用户数据时清理用户数据是一种很好的做法。

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

首先,我从不依赖数据来保证安全。

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

当你这样做时,总是验证它是否适合你所做的事情,你会没事的。

于 2013-03-20T11:40:36.777 回答
0

我认为这是一个坏主意。虽然一开始这可能工作得很好,但它要求您始终对此非常严格,并且从经验中我了解到,您最终总是会得到必须是数字的变量,而不是 ID 字段命名。

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

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

于 2013-03-20T11:43:21.457 回答
0

这是个好主意。更一般地说,您不能信任来自客户端的任何内容,因此检查/验证它总是一个好主意。

我建议您使用一些 PHP 库以一种简单的方式处理 HTTP 请求。试试这个 Symfony 组件,例如: https ://github.com/symfony/HttpKernel

于 2013-03-20T11:47:18.210 回答