【发布时间】: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