facebook服务器验证如何工作?

时间:2013-11-25 12:34:55

标签: php html facebook server-side-validation

考虑一个简单的例子:

  1. 登录您的fb帐户
  2. 发布状态
  3. 点击状态dropdrown(右上角)
  4. 在浏览器中打开开发人员工具,找到“删除”选项的html
  5. 编辑一个类似story_fbid=10202782137141336
  6. 的参数

    由于墙由几个状态和帖子组成,每个状态和帖子都有不同的story_fbid值,因此facebook应该使用这些值来更新/删除相应的帖子。但是,改变这个值的唯一数字(story_fbid)让我们说{ {1}}会引发错误,如下面的快照所示。

    FB error snapshot link

    我是php编程的初学者,很想知道如何在php中完成数据的服务器端验证......

    所以,我正在寻找一个基本的解释,说明在服务器端检测到客户端如何更改html。

    我遇到了类似的问题here。根据其中一个答案,一种可能的方法是服务器使用与特定帖子的ID相关联的UUID。如果在客户端操作此UUID,则服务器检测到此并且不对该ID执行所请求的操作(如DB记录更新/删除)。但是,由于页面可以包含多个具有不同ID的此类帖子,因此不能可能有一个UUID与每个UUID相关联。

    因此。 Facebook使用什么方法来检测这些变化?

1 个答案:

答案 0 :(得分:0)

  

免责声明 - 我完全不知道在Facebook方面做了哪些验证 - 这篇文章仅包含有根据的猜测和一般网络安全概念。

用户提交的任何数据都应被视为已被篡改

我认为这是一个很好的座右铭。喜欢/评论/删除帖子时发送给Facebook的数据仅由提交请求的用户生成的数据组成。无论该数据是由已经在Facebook页面上的JavaScript还是由cURL命令生成的,甚至是由用户手动编译的,都不会对响应该请求的Facebook服务器产生任何影响。

由于在数据到达Facebook服务器之前无法验证数据,因此所有数据都应被视为“可能被操纵/有害”。出于这个原因,可以安全地假设对Facebook服务器发出的每个请求都通过了多个级别的验证:

  1. 此请求有效吗?请求是否符合预期的格式?有效端点?有效参数?有效参数?
  2. 请求的另一端是否有有效用户?他们使用有效的access_token或类似参数吗?
  3. 该用户是否允许发出此请求?对象是否由用户拥有?用户是否具有发出此请求所需的权限?
  4. 等...
  5. 等...
  6. 等...
  7. 还有更多等等...
  8. 甚至可能更多验证......
  9. 如果这些(假定的)验证中的任何一个失败,则会向用户返回错误消息。为了保持确切的验证秘密,Facebook可能选择将通用错误返回给用户,以免让他们确切地知道执行了哪些验证。

    如果用户确切地知道执行了哪些验证,那么绕过它们可能并不困难 - 因此,正如您所看到的,您所提到的错误会提到一系列可能出现的问题:

    • “目前无法显示” - 最常见的解释。
    • “暂时无法使用” - 是吗?像硬盘驱动器失败了?停电?数据中心的互联网已关闭?
    • “link ...已过期” - 可能操纵访问令牌?
    • “没有权限”

    要知道Facebook的确切情况是不可能的 - 这是他们的意图。


    以类似的方式,提供类似于“用户名密码无效”的登录错误的网站不会向用户提供有关哪个参数无效的任何指示。它可以是用户名,也可以是密码。假设只有密码无效,暗示提供的用户名实际上 有效,这可能是该网站不想分享的信息。