0

我想通过发送HTTP POST发布在我的Facebook页面上。我这样做的方式是创建一个永久access_token,用于发布到我的Facebook页面。问题是access_token可以很容易地使用萤火虫或任何其他工具(因为它是硬编码的)进行检查。我怎样才能以一种远离他人的方式发送它。通过向Facebook API发送HTTP请求创建帖子

$appID = 'MY_APP_ID'; 
$fb_page_id = 'MY_PAGE_ID'; 
$fb_page_access_token = 'PERMANENT_ACCESS_TOKEN'; 

$html = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' 
     . '<html><body>' 
     . '<div id="fb-root"></div>' 
     . "<script type=\"text/javascript\"> 
      function post_to_fb(commentText, commentUsername, commentLink) { 
      var logoName = get_logoname_from_link(commentLink); 
      var strURL = 'https://graph.facebook.com/" . $fb_page_id . "/feed'; 
      var params = 'link=' + commentLink + '&name=Brandchamp+-+' + logoName + '&message=[' + commentUsername +'+commented on ' + logoName + ':]+' + commentText + '&access_token=" . $fb_page_access_token . "'; 

      var xmlHttpReq; 
      xmlHttpReq = new XMLHttpRequest(); 
      xmlHttpReq.open('POST', strURL, true); 
      xmlHttpReq.setRequestHeader('Content-type','application/x-www-form-urlencoded'); 
      xmlHttpReq.send(params); 
      } 

      window.fbAsyncInit = function() { 
       FB.init({ 
       appId: " . $appID . ", 
       status: true, 
       cookie: true, 
       xfbml: true, 
       }); 

       FB.Event.subscribe('comment.create', function(response) { 
       var commentQuery = FB.Data.query('SELECT fromid, text FROM comment WHERE post_fbid=\'' + response.commentID + '\' AND object_id IN (SELECT comments_fbid FROM link_stat WHERE url=\'' + response.href + '\')'); 
       var userQuery = FB.Data.query('SELECT name FROM user WHERE uid in (select fromid from {0})', commentQuery); 

       FB.Data.waitOn([commentQuery, userQuery], function() { 
        var commentRow = commentQuery.value[0]; 
        var userRow = userQuery.value[0]; 

        var commentText = commentRow.text; 
        var commentUsername = userRow.name; 

        post_to_fb(commentText, commentUsername, response.href); 
       }); 

      }); 


      }; 
      (function() { 
      var e = document.createElement('script'); 
      e.async = true; 
      e.src = document.location.protocol + '//connect.facebook.net/de_DE/all.js'; 
      document.getElementById('fb-root').appendChild(e); 
      }()); 
     </script>" 
     . '</body></html>'; 
print $html; 
+0

嗅探POST数据通过HTTPS没有的东西,如果它通过HTTP不是很容易实现,你应该更担心access_token'在你的页面的纯文本'存在通过关于嗅探表单提交到图表。 – 2012-04-03 16:29:46

回答

3

根本就没有让用户看到你的访问令牌:你必须建立某种形式的代理,这将张贴到您的网页墙服务器端

0

请告诉我问题,如果是谁授予你一个用户权限可以在萤火虫中看到他/她自己的access_token。 Firebug仅在客户端。此外,官方javascript sdk将access_token提供给客户端。我不认为它很糟糕。

用户总是可以看到他/她自己的密码:)。它有什么不好?

你应该关心通过网络嗅探access_token。由于@Juicy建议使用https来克服这种情况。阅读评论后

编辑:

在你的情况,我建议不要使用JavaScript/AJAX。

此外,我会建议使用您自己的PHP代码sdk。 sdk使用应采取的所有安全措施。

PHP官方SDK:

https://github.com/facebook/facebook-php-sdk

+0

上面的access_token不属于用户。这是一个永久性的access_token,用于让任何使用它的人能够在该Facebook页面上发布信息,只需发送一个将此access_token作为参数的http发布请求即可。 – obada 2012-04-04 11:18:21