【问题标题】:How to validate the ajax post request is coming from [duplicate]如何验证 ajax 发布请求来自 [重复]
【发布时间】:2014-09-10 05:45:05
【问题描述】:

我正在 MVC4 中开发一个 Web 应用程序。 我的应用程序的所有功能都是由 ajax post call 完成的。我什至没有发布单个表单(甚至没有表单标签)所有的事情都是由 ajax 调用完成的。但我害怕错过使用我的 java 脚本。任何获得此代码的人都可以将 虚拟数据 发布到我的应用程序中。所以我需要验证发帖请求是否来自我的网站。

我认为 ajax 调用很好,而不是将所有表单发布到服务器。

我也只在客户端进行了验证。这也是对我的威胁吗?

我如何使用 AntiXSSLibrary 和 HtmlSanitizationLibrary 或 AntiForgeryToken??

【问题讨论】:

  • 如果你所有的验证都是在 JavaScript 中完成的,那么是的这是一个很大的安全问题。发布到服务器的所有数据都必须在服务器上进行验证
  • 验证请求是否来自您的页面:您可以生成一个令牌,将其存储在会话中,并在您呈现页面时将其发送到隐藏字段中,并将该字段的值包含在您的 ajax 调用作为参数,当您收到提交时验证令牌参数的值并与会话中的值进行比较。
  • @jasonscript 我不明白用户如何发布错误数据
  • 因为你使用 JS 将数据发布到你的服务器,所以有人可以查看你的 JS 并弄清楚要提交什么。然后他们可以编写自己的 JavaScript(在控制台中或作为 Chrome 扩展程序)并将自己的数据提交到您的服务器。如果你不检查服务器上的数据,它会接受这个bad数据。有些人甚至关闭了 JavaScript!那么你的页面会发生什么?
  • 如果用户阻止了 javascript,我已经使用 ajax 发布了数据,那么将不会发生任何帖子

标签: javascript ajax asp.net-mvc-4 http-post http-post-vars


【解决方案1】:

在您的方法中使用以下代码

string referer = Request.ServerVariables["HTTP_REFERER"];
            if (string.IsNullOrEmpty(referer))
            {
                Response.Redirect("/UnauthorizedAccess.aspx");
            }

【讨论】:

  • 这不会阻止人们绕过脚本提交不良数据。
  • 因为您无法控制用户向您的服务器发送 HTTP 请求的内容。他们控制客户端软件。他们可以发送任何他们喜欢的东西。包括虚假的引用标头。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-04
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 2021-12-21
  • 2014-08-12
  • 1970-01-01
相关资源
最近更新 更多