如何从浏览器控制台停止数据发布?

时间:2014-08-15 04:40:52

标签: javascript ajax cookies xss

过去几个月我一直在考虑这个问题。最近,我开始使用完整的JS Built前端,其中表单使用Ajax发布。

我怀疑,如何在服务器端识别数据的来源。它来自实际的form事件,还是来自browser console。?

我尝试过:

创建双向握手:在发布form之前,应用程序将联系服务器,服务器将在cookie中发送token,这将是发回form帖子。但是,即使我们通过浏览器控制台发布,cookie也将携带令牌。所以,失败了。

绑定隐藏字段:但如果有人从浏览器控制台发布数据,他肯定会查找隐藏字段。基本上,他会以同样的方式复制我的AJAX以发送相同的请求。 FAILED !!

我无法弄清楚这一部分。有人可以帮忙吗?

提前致谢。

1 个答案:

答案 0 :(得分:3)

互联网节目的规则#1: 永远不要相信客户端的任何内容。 EVER。

互联网编程规则#2: 永远不要相信客户端的任何内容。 EVER。

互联网编程规则#3: 您无法让客户端值得信赖。

我知道第一条规则是重复的两次,但这是值得的。

根本没办法做你打算做的事。

希望通过AJAX请求或POST请求向您的服务器发送数据的人可以轻松地执行以下任何操作:

  • 使用浏览器工具或代理修改表单并强制提供他想要的任何信息。
  • 通过fiddler2之类的工具捕获整个事务,并更改值并重新发送它们。无需浏览器。
  • 修改从您的网站运行的代码,以发送(或允许)他希望发送的任何数据。
  • 使用Curl之类的工具假冒浏览器并发送他想要的任何信息。

在您的服务器上根本无法知道该信息的来源。

从安全角度来看,您根本无法信任任何 - 永远

验证凭据,为用户提供登录令牌(通常是cookie),然后仍然怀疑客户端发送给您的所有内容。如果有些内容不应更改或更新,请确保您的后端不允许更改或更新。

我们的应用程序中有大量代码如下所示:

if (user.HasPermission("MayUpdateFirstName") {
   record.FirstName = FormData.FirstName
}

这样,如果传入FirstName,并且用户无法修改它,那么它就不会被修改。