public
Created

CakePHP Mass Assignment Vulnerability - common process

  • Download Gist
Post.php
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14
<?php
// モデルの場合。
// 以下と相似なヘルパーメソッドを作れば、いちいち同じようなメソッドを大量生産しなくて済むよ!
 
class Post extends AppModel {
 
public function edit($id, $data) {
$this->create(false);
$this->set($data);
$this->set('id', $id);
return $this->save(null, true, array('name'));
}
 
}
PostsController.php
PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
<?php
 
class PostsController extends AppController {
 
public function edit($id = null) {
if ($this->RequestHandler->is('post')) {
// 更新なのでcreate()にfalseを指定する
$this->Post->create(false);
// データをセットする
$this->Post->set($this->request->data);
// IDだけはpostデータでセットされると好き勝手やられる可能性があるので、pass(アクションの引数)で渡ってきたものを使う
// isAuthorized()でpassの一番目をチェックすることで、記事の所有者であるかを確かめることができる(存在しないレコードとかも)
$this->Post->set('id', $id);
// 保存するフィールドの指定は必ずする。
if ($this->Post->save(null, true, array('name'))) {
// success/redirect
}
}
}
 
}

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.