1

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

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

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

跨域是正确的主题还是与其他安全问题有关?

谢谢

4

3 回答 3

2

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

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

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

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

于 2009-01-22T17:19:30.847 回答
0

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

于 2009-02-03T02:21:18.017 回答
0

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

于 2009-02-16T23:58:48.057 回答