■ユーザーズフォーラム リニューアルのお知らせ
新規投稿は新ユーザーズフォーラムにお願いします。

外部APIとPOSTリクエストでやり取りしたい。

binbin4649 > 外部APIとPOSTリクエストでやり取りしたい。 @ 2015/3/25 20:38
独自で用意したコントローラーのアクションに、
$this->autoRender = false;
を設定し、XMLリクエストが帰るようにしています。

GETリクエストに対しては、希望通りXMLが返りますが、
POSTリクエストに対しては、404 NOT FOUND (type:auth)〜〜 と帰ってきます。

色々調べた限りでは恐らく、SecurityComponent が働いて404を返してると思うのですが、
これを特定のコントローラーだけ解除するようなやり方はないでしょうか?

試しに、アクションにこんなものを置いてみましたが、ダメでした。
$this->Security->enabled = false;


素のcakephpで動いていたコードをBaserに移植して、はまっております。
外部APIとやり取りすることは良くあることだと思うのですが、みなさんはどうやってますでしょうか?


■ BaserCMSのバージョン:3.0.7
■ レンタルサーバー名:さくらサーバー VPS
■ スマートURLの利用: ON
■ 設置フォルダ: サブフォルダ
■ PHPスキル(自己評価): D
■ OSの種類:CentOS release 6.6 (Final)
■ PHPのバージョン:PHP 5.5.21 (cli)
■ データベース種類・バージョン:MySQL 5.5.39
binbin4649 > Re: 外部APIとPOSTリクエストでやり取りしたい。 @ 2015/3/26 10:04
自己解決しました。


public function beforeFilter() {
	parent::beforeFilter();
	$this->Security->validatePost = false;
	$this->Security->csrfCheck = false;
}


コントローラーにこれを置いたらできました。
Basercmsというより、cakephpの問題でした。お騒がせしました。
素のcakephpは、SecurityComponent使ってなかったので出来たんですね。


(後学のために) アクション毎に切り分けるには、以下のようにすれば良いようです。

public function beforeFilter() {
	parent::beforeFilter();
	if ($this->params['action'] == アクション名) {
		$this->Security->validatePost = false;
		$this->Security->csrfCheck = false;
	}
}
n1215 > Re: 外部APIとPOSTリクエストでやり取りしたい。 @ 2015/3/26 23:41
binbin4649 様

SecurityコンポーネントのcsrfCheckはCSRF攻撃への対策を行う設定です。
ローカルネットワークで動かしていたり他の認証や対策があったりする場合以外は
CSRF対策トークンのチェックをオフにするのはおすすめしません。

脆弱性を作りこまないためにはPOSTの前にCSRF対策トークンを別枠で取得してくるなどの工夫が必要です。

Twitter: @n_1215

ログイン
ユーザー名:
パスワード:


  新規登録 / パスワード紛失

検索

facebook
フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

フォーラムガイド


関連リンク

オンライン状況
33 人のユーザが現在オンラインです。 (31 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 33