考虑一个简单的例子:
story_fbid=10202782137141336
由于墙由几个状态和帖子组成,每个状态和帖子都有不同的story_fbid值,因此facebook应该使用这些值来更新/删除相应的帖子。但是,改变这个值的唯一数字(story_fbid)让我们说{ {1}}会引发错误,如下面的快照所示。
我是php编程的初学者,很想知道如何在php中完成数据的服务器端验证......
所以,我正在寻找一个基本的解释,说明在服务器端检测到客户端如何更改html。
我遇到了类似的问题here。根据其中一个答案,一种可能的方法是服务器使用与特定帖子的ID相关联的UUID。如果在客户端操作此UUID,则服务器检测到此并且不对该ID执行所请求的操作(如DB记录更新/删除)。但是,由于页面可以包含多个具有不同ID的此类帖子,因此不能可能有一个UUID与每个UUID相关联。
因此。 Facebook使用什么方法来检测这些变化?
答案 0 :(得分:0)
免责声明 - 我完全不知道在Facebook方面做了哪些验证 - 这篇文章仅包含有根据的猜测和一般网络安全概念。
用户提交的任何数据都应被视为已被篡改。
我认为这是一个很好的座右铭。喜欢/评论/删除帖子时发送给Facebook的数据仅由提交请求的用户生成的数据组成。无论该数据是由已经在Facebook页面上的JavaScript还是由cURL命令生成的,甚至是由用户手动编译的,都不会对响应该请求的Facebook服务器产生任何影响。
由于在数据到达Facebook服务器之前无法验证数据,因此所有数据都应被视为“可能被操纵/有害”。出于这个原因,可以安全地假设对Facebook服务器发出的每个请求都通过了多个级别的验证:
access_token
或类似参数吗?如果这些(假定的)验证中的任何一个失败,则会向用户返回错误消息。为了保持确切的验证秘密,Facebook可能选择将通用错误返回给用户,以免让他们确切地知道执行了哪些验证。
如果用户确切地知道执行了哪些验证,那么绕过它们可能并不困难 - 因此,正如您所看到的,您所提到的错误会提到一系列可能出现的问题:
要知道Facebook的确切情况是不可能的 - 这是他们的意图。
以类似的方式,提供类似于“用户名或密码无效”的登录错误的网站不会向用户提供有关哪个参数无效的任何指示。它可以是用户名,也可以是密码。假设只有密码无效,暗示提供的用户名实际上 有效,这可能是该网站不想分享的信息。