FacebookからのリクエストがsfGuardのセキュリティをバイパスできるようにしたい場合は、大きなセキュリティホールになる可能性があります。誰かがFacebookでそのリンクをクリックすると、ログインしなくてもWebサイトにアクセスできるようになります。
ページをスクレイプするFacebookボットを微調整することで回避策を見つけることができます。スクレーパーのユーザーエージェントは次のとおり"facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)"
です。したがって、ユーザーエージェントを調べることで、リクエストへのアクセスを簡単に許可できます。しかし、今日では誰でも簡単にユーザーエージェントを偽装することができます。
多分あなたは他の方法を見つけなければなりません。私は、誰もがアクセスでき、最小限の情報(アーティストと曲名だけを再生できないなど)を表示できる一種のライトページについてですが、誰かがログインしていない場合は、念のために言っておきます。ページを表示してみてください。ログインページではなく、このライトページにリダイレクトされます。要点はわかりますか?
次に、巨大なボタンを配置して、新しいユーザーが登録してページ全体を表示できるようにします。
とにかく、どのような場合でも、(でfilters.yml
)filterを使用して実装する必要があります。フィルタは、アクションの前に実行されます。したがって、この種のチェックに最適な場所です。
フィルタに関する情報があります。
- 公式 サイト( 2リンク)
- ここではssl要件の実装(申し訳ありませんがgooglecacheページ)
- ここで基本的な実装
編集:
私はそのようにsthを続けます。まず、「facebook bot」というユーザーを作成し、そのIDを/apps/frontend/config/app.yml
:に入力します。
all:
facebook_bot_id: 56 // sf_guard_user_id
次に、簡単なフィルターを作成しますlib/filter/facebookBotFilter.php
<?php
class facebookBotFilter extends sfFilter
{
public function execute ($filterChain)
{
$context = $this->getContext();
$controller = $context->getController();
$request = $context->getRequest();
$user = $context->getUser();
// get the user agent
$pathArray = $request->getPathInfoArray();
$useragent = isset($pathArray['HTTP_USER_AGENT']) ? $pathArray['HTTP_USER_AGENT'] : '';
if (preg_math('/facebookexternalhit', $useragent))
{
$member = Doctrine_Core::getTable('sfGuardUser')->find(sfConfig::get('app_facebook_bot_id'));
// logged in the facebook bot
$user->signIn($member);
}
// execute next filter
$filterChain->execute();
}
}
でフィルターを有効にすることを忘れないでくださいapps/frontend/config/filters.yml
:
rendering: ~
facebookBotFilter:
class: facebookBotFilter
security: ~