【发布时间】:2013-03-28 03:25:56
【问题描述】:
我有一个 cakephp 1.3 应用程序,但我遇到了“数据泄漏”安全漏洞。我正在寻找使用蛋糕的最佳解决方案,而不仅仅是可行的方法。该应用程序是一个成绩跟踪系统,教师可以输入成绩,学生可以检索他们的成绩。一切都按预期工作,但是当我开始审核安全性时,我发现基本的 CRUD 操作存在漏洞。这意味着学生 X 可以看到学生 Y 的成绩。学生应该只看到自己的成绩。我将把这个问题限制在读取操作上。
使用 cake,我有一个grade_controller.php 文件,里面有这个视图函数:
function view($id = null) {
// Extra, not related code removed
$this->set('grade', $this->grade->read(null, $id));
}
还有
http://localhost/grade/view/5
显示学生 $id=5 的成绩。那太棒了。但是,如果学生#5 操作 URL 并将其更改为 6,则会显示第 6 人的成绩。经典的数据泄露安全漏洞。
对于解决此问题的最佳方法,我有两个想法。 1)我可以为控制器中调用的每个 CRUD 操作添加检查。或者 2) 向模型添加代码(例如使用 beforeFind())来检查人员 X 是否有权访问该数据元素。
选项#1 似乎很耗时且容易出错。 选项#2 似乎是最好的方法。但是,它需要在某些操作之前调用 find()。上面的 read() 示例从不执行 beforeFind() 并且没有 beforeRead() 回调。
建议?
【问题讨论】:
-
您的网站上是否有用户认证系统?如果是这样,您应该将用户分组在一起。然后,您可以将逻辑添加到您的读取功能,以允许学生组中的用户只能访问他们自己的用户 ID 中的数据。这就是我要走的路。