我的许多带有用户数据的函数都通过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变量必须是数字,如果是其他任何内容则失败。
答案 0 :(得分:1)
许多PHP框架都是这样做的(Symfony2只是一个例子)。
他们使用一些验证规则和输入转义工具,以验证用户输入,所以,是的,不要信任用户发送给你的所有内容,但是你可以做的就是验证输入。
此外,静态函数(或许多静态函数)将与单个(或许多)形式耦合。我建议你为每个需要验证的表格(或一般数据)实现一个特定的功能
不要信任HTML5或JavaScript约束,因为它们很容易被绕过。正如我在评论中建议的那样,在“最后一步”控制用户输入(即用模型或表格绑定数据,或其他)
答案 1 :(得分:0)
我认为这不是一个好主意,原因有很多,例如:
当然可以进行一些验证。用于exmaple的PHP模块suhosin(AKA hardened php)可以防止攻击。
但根据我的经验,最好在处理用户数据时对其进行清理。
例如,我总是将引用应用于我在数据库查询中使用的数据。 Alawys,就在构建查询之前。
我从不首先依赖数据安全。
在任何情况下,您都不应该信任外部来源提供的任何数据。
当你这样做时,Alwas会对你做的事情进行验证,你会没事的。
答案 2 :(得分:0)
我认为这是一个坏主意。虽然这一开始可能效果很好但它要求你一直非常严格,从expierence我已经知道你总是会得到必须是数字的变量,但不能用ID字段命名。
此外,您可能需要更多验证(例如有效的电子邮件,电子邮件地址,邮政编码或有效的guid)。
最后,你仍然需要验证每个参数,然后才能使用它,所以这似乎毫无用处。
答案 3 :(得分:0)
这是一个好主意。更一般地说,你不能相信来自客户的任何东西,所以检查/验证它总是一个好主意。
我建议您使用一些PHP库来轻松处理HTTP请求。试试这个Symfony组件,例如: https://github.com/symfony/HttpKernel