CakePHP1.2.1.8004 で AuthコンポーネントとScaffoldを併用する際の注意事項
Wednesday, February 04, 2009 10:02:22 AM
<!– more –>先日セキュリティアップデートとして、1.2.0から1.2.1に更新されたのは、皆さんご存知のことと思います。
で、昨日やっとこさ1.2.1を使い始めたら、なんとAuthでログインしてなくてもscaffoldのアクションが動いちゃうじゃないですか!!。これはまずい。。
なお肝心のセキュリティアップデートは、CakePHP 1.2.1.8004へアップデート推奨からリンクされている「Changeset 7979」の差分のようなので、今回の回避策を使っても、問題なさそうだと判断しています。まぁscaffold使ってなければ関係ないのですけどね。
で、問題の箇所はAuthComponent::startup()で
$isErrorOrTests = (
strtolower($controller->name) == 'cakeerror' ||
(strtolower($controller->name) == 'tests' && Configure::read() > 0) ||
!in_array($controller->params['action'], $controller->methods)
);
if ($isErrorOrTests) {
return true;
}
という箇所があるのですが、
!in_array($controller->params['action'], $controller->methods)
というコードの「$controller->methods」にはscaffoldのアクションが含まれていないんですよね。なんでコントローラにそんなメソッドないよエラーページに遷移しようとして、ログイン画面には遷移しないんですが、ほんとのところはscaffoldに遷移して、一覧・追加・変更・削除ができちゃうというトホホな感じです。
なのでscaffoldをAuthのログイン傘下で使っている人は、Authから$controller->methodsに含まれているかどうかチェックは外してしまいましょう。
これから本家のTracにチケットを書くとします。。。
その後、あっさり本家から「Bakeしてね」とやんわり修正を断られてしまったので、Auth使う人はscaffold使わないか、$controller->methodsにbeforeFilterでscaffoldAction追加するとか(たぶんこれは良くないけど)、Authを継承して変えちゃう(startupの前でscaffoldActionをarray_mergeして、戻ってきたら元の値に戻せば・・・まぁ、どうか?というのもありますけど)とか、まぁいろいろ策はあるかな?と思います。
PS: この、$controller->methodsですが、どこで使ってんの?と調べてみたら、dispatcherとauthだけでした。dispatcherは当然として、なんでauthが!??という不思議な感は否めないのですが、こればっかりは仕方ないですね。今後使うところ増えるかもしれないし。
Recent Articles
- マルチプルレポをモノレポへコミットログを残しながら移行する 2023/09/27
- tsyringe を TypeScript 5 で使う方法 2023/05/02
- LocalStack を使って aws-sdk の Integration Test を実行する 2023/04/19
- AWS SDK v3 のモジュールと利用方法 2023/04/18
- ts-jest が esbuild/swc をトランスフォーマーに使って高速化していた 2023/04/13
- aws-sdk v3 を使うライブラリを作ったときは、なるべく peerDependencies に設定しよう 2023/04/11
- aws-sdk v2 が 2023 年中にメンテナンスモードになる 2023/04/06
- Node.js v18 / aws-sdk v3 の Lambda アプリが突然動かなくなる 2023/04/05
- aws-sdk v3 でコンパイルエラーになる - その2 2023/04/04
- aws-sdk v3 で TS2345 が出てコンパイルエラーになる 2023/04/03