【问题标题】:How to stop from data post from browser console?如何停止从浏览器控制台发布数据?
【发布时间】:2014-08-15 04:40:52
【问题描述】:

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

我有一个疑问,如何在服务器端识别数据来自哪里。它是来自实际的form 事件还是来自browser console.?

我尝试过的:

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

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

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

提前致谢。

【问题讨论】:

  • 您无法以任何方式“识别”它。你的服务器将看到的只是一个请求已经发出——所以让它相应地处理那个请求。只要满足所有必要的要求(例如,经过正确身份验证的用户,允许发出此类请求),此类请求的“来源”对您的应用程序来说根本不重要。如果你认为是这样,那么你从一开始就做错了。
  • 您可能想查看this Chrome question
  • @CBroe:假设我的服务器必须接受数据中存在的所有特殊字符,那么我将如何验证脚本标签。在服务器端。?如果用户从控制台发布<script> 标签,那么它就会一直存在。?
  • 不确定你在这里想说什么......如果这是关于 XSS,那么我所说的仍然有效:你的应用程序必须能够处理 any 类型的数据无论数据来自何处,它都会被发送——只要数据的“处理”意味着拒绝进一步处理。您绝对不能依赖“我的应用程序将只接收某些类型的数据,因为我以这种方式编写了客户端部分” - 发送到您的应用程序的数据甚至可能不是来自一个“浏览器”,但实际上任何其他能够发出 HTTP 请求的东西……

标签: javascript ajax cookies xss


【解决方案1】:

互联网编程规则#1: 永远不要相信来自客户端的任何东西。永远。

互联网编程规则#2: 永远不要相信来自客户端的任何东西。永远。

互联网编程规则#3: 你不能让客户值得信赖。

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

根本没有办法做你想做的事。

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

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

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

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

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

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

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

这样,如果传入了 FirstName,而用户不能修改它,那么它就不会被修改。

【讨论】:

  • 谁不能改名字?
  • @JanDvorak Egads,不要让我开始。我们的应用程序具有疯狂的权限级别,几乎每个字段都被这样包装。我们做企业对企业的软件,我们的一些客户只他们的客户编辑个人数据。我们的一些客户要求对个人/个人资料信息的任何更改员工完成。其中一些是出于不同国家/地区的法律原因 - 如果某人将所有税表都以某个名称制作,则所有文件都必须以该名称签发。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-09-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 2014-05-12
  • 2013-03-29
相关资源
最近更新 更多