【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【CakePHP2.x】Securityコンポーネントを使用したときの不具合【black-holed】

開発チームの長谷です。

CakePHPでログイン機能を実装するため、Securityコンポーネントを使用していたら、
こんな謎のエラーが発生しました。

The request has been black-holed

ブラックホール?なんだこれは。。
特にフォーム送信後にブラウザで「戻る」をして、もう一回送信したりすると発生する。。。

まだペーペーの自分にはこのエラーがどういったものか分からなかったので、
とりあえず解決方法を調べてみることにしました。

PostやAjaxを許可する

フォーム画面でほぼほぼエラーが出ていたので、
beforeFilterでPostとついでにAjaxを許可するようにしました。

app/Controller/AppController.php

1
2
3
4
5
6
7
8
9
public function beforeFilter() {
 
    $this->Security->validatePost = false;
    $this->Security->csrfCheck = false;
         
 ...
    // ~なんらかの処理~
     
}

これでエラーが発生しなくなったかなと少し期待しつつ確認をしましたが
やっぱり、同じエラーが発生していた。
再び調査開始。

オーバーライドしているのを修正

AppController.phpのbeforeFilterでPostとAjaxを許可したことによって、
ControllerがbeforeFilterをオーバーライドしてしまい、
通信の許可がなくなってしまったらしい。

なので、black-holeエラーが発生するControllerを修正。
beforefilterにparent::beforeFilter();を追加します。

app/Controller/UserController.php

1
2
3
4
5
public function beforeFilter() {
    parent::beforeFilter();
 
    // ~なんらかの処理~
}

これでエラーが出なくなっただろうと思い、
確認してみましたが、再度同じエラーが発生。。

ブラックホールコールバックの処理

ここまできて何だが、公式サイトに対応方法が書いてありました。。

Security コンポーネントによって制限されている時、 デフォルトでは、不正なリクエストとして 400 エラーを返し破棄します。
コントローラ中のコールバック関数を $this->Security->blackHoleCallback に設定することによってこの振る舞いを変更できます。

つまり、フォーム送信後にブラウザで「戻る」をしてもう一度送信をするという行為が
不正なリクエストなので、
400エラーを返しblack-holedエラーが発生していたということになります。

最初から公式サイトを見ておけばよかった。。

というわけで、black-holeエラーが発生するControllerのbeforefilterを以下のように修正。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public function beforeFilter() {
 
    parent::beforeFilter();
 
    $this->Security->blackHoleCallback = 'blackhole';
 
    $this->Security->validatePost = false;
    $this->Security->csrfCheck = false;
 
    // ~なんらかの処理~
}
 
// ブラックホールをスルーする
public function blackhole($type) {
}

これで、black-holedエラーが出なくなりました!!
一安心。。

参考

https://book.cakephp.org/2.0/ja/core-libraries/components/security-component.html
http://www.aipacommander.com/entry/2015/04/27/180000

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
3
読み込み中...
3 票, 平均: 1.00 / 13
7,203
X facebook はてなブックマーク pocket
【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

【2026.6.30 Amazon Linux 2 サポート終了】Amazon Linux サーバー移行ソリューション

この記事をかいた人

About the author

長谷竜弥

新卒にて株式会社ビヨンドに入社。

Webシステム開発(Webサービス・デジタルコンテンツ・業務管理システム などのブラウザで動くサービス、システムの開発)や、ゲームAPI(アプリゲームとの通信部分のプログラム開発)を行っている。

また、Shopify のプライベート / カスタムアプリの開発も行っている。

元々は大阪オフィスに勤めていたが、2019年に横浜オフィスに転勤。
趣味は野球 / カラオケ / アニメ