0

私は正常に動作するコードイグナイターアプリを持っています。Facebook キャンバス アプリを作成し、codeigniter によって生成されたページを読み込んでみました。うまくいきませんでした。そして、「あなたが要求したアクションは許可されていません」という恐ろしいメッセージが表示されました。私のFacebookアプリの設定が正しいことを確認するために、別のサイトのページで試してみましたが、うまくいきました.

考えられる問題の検索を開始したところ、cornfig 設定の CSRF protection=TRUE が原因であることがわかりました。したがって、CSRF保護をオフにして、機能するかどうかを確認しました。その後、それは機能し、実際に codeigniter で生成されたページを Facebook キャンバス アプリ (サンドボックス モードでは..) を介して読み込むことができました。

csrf トークンの隠しフィールドをハードコーディングすれば (form_open() 関数に依存する代わりに)、このルールを回避でき、そのロジックによって、フォームをまったく持たないページがあれば正常に動作するはずであると示唆する人もいました。また、フォームのないページでも読み込めませんでした。

そして、私はどこでもAJAXを使用していません。

CI 2.1.3 を使用しています。

1 つの関連リンク - http://ellislab.com/forums/viewthread/228160/#1038448 Stackoverflow や他のフォーラムにも同様の質問がたくさんありますが、満足のいく答えが見つかりませんでした。

Apache のログだけを見ると、CSRF 保護をオフにするのは良い考えだとは思えません。

では、CSRF保護をオフにせずに、codeignterで生成されたページをFacebookキャンバスアプリに表示するにはどうすればよいですか?

どんなポインタも役に立ちます。ありがとうございました。

4

1 に答える 1

1

この問題の根本的な原因は、Facebook がアプリ ページの iframe を呼び出す方法にあります。Facebook はデフォルトで $_POST 配列のパラメーター (signed_request) で投稿を送信します。しかし、Codeigniter が CSRF 保護をチェックすると、post 配列に csrf トークンが見つかりません。

したがって、明らかにこれに対する直接的な解決策はありません。csrf_verify関数内の条件を変更してsystem\core\Security.php、$_POST['signed_request'] の値がある場合に検証しないようにすることもできますが、それは良い考えではありません。

于 2014-01-02T13:19:35.163 に答える