过去一个月左右我一直在学习Vue,但有一个问题仍然困扰着我:
我正在开发的网络应用程序允许用户收集各种项目的日常日记,这样他们就可以从一个项目切换到另一个项目,并编辑相关日记。
考虑到基于角色的身份验证(尚未实现(,我计划加载用户可以访问的第一个项目,作为应用程序的入口点。我会从API获取他们可以访问的第一个项目,并将其作为数据属性存储在App.vue中,如下所示:
data: ({
appState: {
projectCode: "1298BAX",
projectName: "Learning JavaScript 2020",
availableProjects: ["Learn Node", "Learn Express"],
company: [],
},
}),
"appState"对象通过在从API获取日记时引用"projectCode"属性来指定应用程序应加载哪些日记。并且如果用户切换到不同的项目,例如;学习节点";那么新的appState将是:
data: ({
appState: {
projectCode: "444444",
projectName: "Learn Node",
availableProjects: ["Learning JavaScript 2020", "Learn Express"],
company: [],
},
}),
现在用户可以获取";学习节点";当他们导航到可以编辑的日记列表时。
我担心的是,这不是一个安全的模式。在数据属性中存储将在API调用中使用的此类数据是否安全?这会是一个安全问题吗?或者这样做通常安全吗
我欢迎你提出建设性的反馈和建议。我为我的无知道歉,但作为一个没有经验的开发人员的单独开发人员学习,当谷歌搜索让你失望时,像这样的理论问题很难解决:(
一旦数据进入浏览器,就没有任何数据是安全的。唯一的解决方案是始终检查服务器端的用户权限。。。
不要相信来自浏览器的任何东西:(
这不是Vue问题,所以我在这里所说的一切都适用于网络上的其他任何地方。当涉及到保护你的网站时,采取这个简单的规则并运行这个:
前端没有任何安全措施
我什么意思也没有。即使你在上面安装了Auth Guards等等,如果信息存储在JavaScript文件中,任何人都可以看到。
真正保护某些东西的唯一方法是让服务器将其提供给客户端。服务代码对客户端不可见,这就是为什么您可以在那里做任何您想做的事情。
不过,如果您确实想实现一个身份验证系统,我建议您使用像Auth0、JWT Tokens或Firebase这样的现成系统,而不是完全从头开始自行设置。
本质上,使用这些系统时之所以安全,是因为每个用户都有一个任何人都猜不到的唯一ID,或者一个唯一的令牌,当用户使用ID/token向服务器提出请求时,用户只能访问数据库中的敏感信息,并且只能访问存储该用户特定信息的位置。
因此,如果用户x只能获得与用户x相关的信息,而用户y只能获得与他相关的信息。
如果有人试图进行API调用并获取一些信息,他将只能获取自己的信息,而不能获取其他人的信息,因为身份验证和ID/Token比较发生在后端,就像我所说的,试图猜测唯一的UID几乎是不可能的,因为它是如此独特。(还有很多系统会阻止伪造它的尝试(