过去几个月我一直在考虑这个问题。最近,我开始使用完整的JS Built前端,其中表单使用Ajax
发布。
我怀疑,如何在服务器端识别数据的来源。它来自实际的form
事件,还是来自browser console
。?
我尝试过:
创建双向握手:在发布form
之前,应用程序将联系服务器,服务器将在cookie中发送token
,这将是发回form
帖子。但是,即使我们通过浏览器控制台发布,cookie
也将携带令牌。所以,失败了。
绑定隐藏字段:但如果有人从浏览器控制台发布数据,他肯定会查找隐藏字段。基本上,他会以同样的方式复制我的AJAX
以发送相同的请求。 FAILED !!
我无法弄清楚这一部分。有人可以帮忙吗?
提前致谢。
答案 0 :(得分:3)
互联网节目的规则#1: 永远不要相信客户端的任何内容。 EVER。
互联网编程规则#2: 永远不要相信客户端的任何内容。 EVER。
互联网编程规则#3: 您无法让客户端值得信赖。
我知道第一条规则是重复的两次,但这是值得的。
根本没办法做你打算做的事。
希望通过AJAX请求或POST请求向您的服务器发送数据的人可以轻松地执行以下任何操作:
Curl
之类的工具假冒浏览器并发送他想要的任何信息。在您的服务器上根本无法知道该信息的来源。
从安全角度来看,您根本无法信任任何 - 永远。
验证凭据,为用户提供登录令牌(通常是cookie),然后仍然怀疑客户端发送给您的所有内容。如果有些内容不应更改或更新,请确保您的后端不允许更改或更新。
我们的应用程序中有大量代码如下所示:
if (user.HasPermission("MayUpdateFirstName") {
record.FirstName = FormData.FirstName
}
这样,如果传入FirstName,并且用户无法修改它,那么它就不会被修改。