2011-08-07 14 views
0

(FBMLとFBJSはFacebookによって推奨されていないため、私のサーバーにデータを渡すためのアプローチは使用できません)。Facebookのアプリケーションから私のサーバーにデータを渡す方法(Ajax経由)

私はIFRAMEのfacebookアプリケーションを持っています。これは主にページで使用するように作られています。

ページ管理者が自分のページの自分のアプリケーションタブにアクセスすると、そのページに関する情報を追加する設定ページが表示されます。私は送信ボタンも持っています。ページ管理者が自分のページに関する情報を送信すると、そのページが自分のサーバーに送信され、ページIDとともに保存されます。この設定が完了すると、他のユーザーがページのこのアプリケーションタブにアクセスすると、ページ管理者が投稿した情報が表示されます。

私はFacebookのPHP SDKをサーバ側で使用しており、署名付きリクエストをデコードしてページIDを取得しています。

次はに自分のアプリケーションのindex.phpの中にコードの私のサーバーに(ユーザー入力とともに、ページのIDもここに示されていない、渡されます)

function sendData() { 
    $.post('ajax.php', { 
     data : $("#userdata").val() 
    }, function(data) { 
     alert(data); 
    }); 
} 
</script> 

のデータを送信されます以下は単純なajax.phpスクリプトです。これは現在のテストスクリプトです。

<?php 
echo "<pre>" . print_r($_POST) . "</pre>"; 
?> 

問題は、ユーザーデータがサーバーに送信されているだけです。このアプローチにはセキュリティ上の問題があります。 'signed_request'(私の要求を検証するためにfacebookが私のindex.phpに最初に送る)をユーザデータと共に送信したいので、サーバ側からのリクエストを検証して、右側の情報を更新することができますページ。それ以外の人は、このようなリクエストを投稿して、任意のページの情報を更新することができます。

firebug image

+1

フォーム入力を検証するために 'signed_request'を送る必要はありません。あなたは[CSRF](http://en.wikipedia.org/wiki/Cross-site_request_forgery)トークンを送る必要があります。また、php-sdkを使用している場合は、セッション内のサーバー上に 'signed_request'があるはずです。 – ifaour

答えて

1

あなたがする必要があるのは、あなたが要求は、あなたのアプリを承認している有効なFacebookのセッションで誰かによって送信されたことを確認することができ、同様にあなたのサーバサイドAjaxのスクリプトでFacebookのPHP SDKを使用しています。

アプリケーションを使用している複数のユーザーがそれぞれのページ設定を変更するよう偽のリクエストを送信しようとしているのであれば、FacebookのIDが管理しているFacebookページに関連付けられている情報を保存するだけです。

たとえば、サーバーにリクエストを送信するときに、ページIDから派生した暗号化されたキーと共にページIDを送信します(この暗号化されたキーは、表示中に隠しフィールドに保持します)。サーバーで、ページIDと一致するようにこのキーを復号化します。このようにして、ページ管理者が「自分の」ページの情報のみを変更していることを確認できます。

関連する問題