ReactJs-如何防止用户篡改/修改客户端代码中的相等性检查

时间:2018-12-23 14:48:37

标签: javascript reactjs

我目前正在使用ReactJs 16构建示例社交网络应用程序。作为我的应用程序的一部分,我允许用户登录并添加帖子。用户也可以添加朋友。

每个用户都有自己的个人资料页面。在自己的个人资料页面上,登录的用户可以看到自己的帖子(他也可以编辑/删除自己的帖子)。

用户还可以查看其朋友的个人资料页面。 但是,在朋友的个人资料页面上,登录的用户只能看到该帖子,而不能编辑/删除其朋友的帖子。

我要实现此行为的方法是检查登录的用户ID与帖子创建者的ID是否相同。仅当ID匹配时,我才向用户显示帖子上的“编辑/删除”选项。 我创建了一个Profile组件,该组件在用户单击Profile Page时呈现。该组件可重复使用,以显示登录用户和朋友的个人资料页面。

我想知道是否有更好的选择来实现上述行为?我对实现此方法的方式不满意的原因是,因为我在前端(即客户端代码)进行了上述id相等检查,因此用户很容易对其进行篡改。 我知道通过使用丑陋化,我将能够使我的代码难以进行反向工程,但是对于任何坚定的家伙来说都是不可能的。

因此,我有兴趣知道是否有更健壮和安全的方法来实现此行为。

2 个答案:

答案 0 :(得分:4)

用户可以修改客户端代码的事实并不重要,因为服务器端应围绕“不信任客户端”进行设计。

即使最终用户看不到或修改JS,他们仍然仍然可以修改发送到服务器的网络请求(例如,将删除请求中的帖子ID更改为朋友的ID)。

您的服务器应阻止用户修改或删除他们不应该做的事情,例如其他用户的帖子,并且应将错误返回到前端,通知用户不允许他们执行操作。请求采取的行动。

这是实现它的最安全的方法,因为它可以确保即使修改UI,用户也无法做他们不应该做的事情。

答案 1 :(得分:2)

您最好的方法实际上是使用授权(可能是owningUserId的DB条目)限制行为在服务器(后端)中。

即使用户在前端找不到代码,他也可以使用朋友的ID向服务器模仿POST请求,并要求删除/编辑他想要的任何内容。

但是在这种特定情况下,我可能会使用道具来确定查看帖子的用户是否是所有者\朋友,并使用2个不同的组件来显示数据(但这不是最佳做法)。