【问题标题】:Security and Cross Domain with ASP.NET MVC JsonResult and jQuery使用 ASP.NET MVC JsonResult 和 jQuery 的安全性和跨域
【发布时间】:2009-01-22 17:13:19
【问题描述】:

我正在使用 asp.net MVC 开发具有 ajax 交互的应用程序。我在控制器中有 JsonResult 方法返回我的 json 序列化数据。因此,例如,当向http://somesite.com/findwidgets/ 发出请求时,mvc 会将数据序列化为 json 并将其发送回。

我在客户端使用 jQuery 来处理 ajax 请求,然后处理结果。我在获取数据时没有遇到任何问题,但我发现我可以从浏览器的地址栏中向http://somesite.com/findwidgets/ 发出请求,它会将 json 数据作为下载返回。

另外,我如何确保其他人不能简单地使用http://somesite.com/findwidgets/ 发出请求和获取数据?

跨域是正确的主题还是涉及其他安全问题?

谢谢

【问题讨论】:

    标签: jquery asp.net-mvc ajax json cross-domain


    【解决方案1】:

    另外,我如何确保其他人 不能简单地提出请求和抢 数据使用 http://somesite.com/findwidgets/?

    您描述的问题与人们在询问他们如何阻止人们从另一个网站发布到他们的表单时所指的问题相同。我见过的唯一合理的答案是使用某种类型的会话密钥系统,其中为每个请求生成一个密钥,并且每个后续请求都必须通过先前生成的密钥进行验证。没有密钥或无效密钥的请求被拒绝访问。

    我发现我可以提出请求 到http://somesite.com/findwidgets/ 从浏览器的地址栏 它将返回 json 数据作为 下载。

    这是因为 JSON 不被识别为文本 mime 类型,浏览器只会在浏览器中直接显示文本 mime 类型。其他任何内容都将作为下载提供,而不是内联显示。

    【讨论】:

    • 感谢您的帖子...您知道 .net 的 MVC 框架中是否有办法阻止 JsonResult 方法响应通过地址栏发出的请求?
    • 您将希望在您的操作中使用 AcceptVerbsAttribute。基本上,您不想允许对 Action 的 Get 请求。例如,在您的操作上添加以下内容:[AcceptVerbs(HttpVerbs.Post)] 这将确保只有 POST 请求才能调用该操作。
    【解决方案2】:

    同时考虑检查请求主机,并将其限制在当前域内。

    【讨论】:

      【解决方案3】:

      您也可以使用控制器的 IsAjaxRequest() 属性(如果它为 false - 例如返回 null 结果)。为了防止从其他站点发布/获取数据,您可以检查 Request.UrlReferrer 属性(但浏览器可能会撒谎)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-23
        • 2016-07-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-12
        • 2010-10-02
        • 2012-04-12
        • 1970-01-01
        相关资源
        最近更新 更多