我有一个 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() 回调。
建议?