8

编辑:

从 DCoder 收到更多信息后,我在这里搜索的短语是“批量分配漏洞”。也就是说,利用将所有有效字段保存到数据库中的方法的便利性,而不管它们是否存在于初始表单上(使它们容易受到包含比预期字段更多[可能更关键]字段的操纵 POST 数据的攻击)。

然后将这两种常见的响应适当地命名为白名单和黑名单;将用于修改的字段列入白名单,或将不应修改的字段列入黑名单。

然后我的问题是:CakePHP 是否只自动将提交表单中的那些字段列入白名单,或者我(和其他 Cake 粉丝)是否有必要小心我们适当地列入白名单或列入黑名单?


原始问题:

Cake 提供了许多很棒的方法来生成表单并几乎自动处理它们。当我考虑安全性时,我想知道:Cake 是否知道提交的表单中存在哪些字段,或者它是否会简单地接受任何有效字段?如果我没有意义,请采取以下 senario(如果他们能想到更好的表达方式,欢迎有人编辑我的问题以更好地措辞):

假设我允许我的用户编辑他们的个人资料。我在 action 下创建了一个包含用户名、电子邮件和密码字段的表单edit

一位聪明的用户想要进来并将他们的is_admin字段从更改falsetrue,因此他们使用像 firebug 这样的应用程序将自定义帖子数据提交给edit操作,其中包括is_admin设置为的字段true

问题是,Cake 会自己意识到这is_admin不是原始形式,还是我需要小心明确指定给定操作可以修改的唯一字段?有没有更简单的方法?

谢谢!

詹姆士

4

2 回答 2

4

您必须SecurityComponent在控制器中加载,CakePHP 会为您防止表单篡改,请参阅http://book.cakephp.org/2.0/en/core-libraries/components/security-component.html#form-tampering -预防

于 2012-05-05T05:26:11.743 回答
-2

CakePHP 内置了可用的验证选项。表单会根据您在模型中提到的验证标准自动生成字段并进行验证。此验证将在 Save 方法之前自动调用。

此外,如果您想添加一些自定义验证,您可以在模型中添加它。

使用您的特定查询,您可以is_admin从编辑表单中删除该字段,以便用户无法对其进行编辑。如果您想增加更多安全性并确保该is_admin字段具有 false 值,您可以在控制器编辑方法中编辑其值。

在 edit 方法中,您可以在调用 Save 操作之前添加以下代码。
$this->request->data['ModelName']['is_admin] = false;

于 2012-05-05T04:13:23.183 回答