Asp.net mvc 如何确保对返回JSON的MVC操作的访问
我有一个面向公众的网站,是用ASP.NETMVC3开发的。MVC应用程序包含具有返回JSON的操作的控制器。网页根据返回JSON的操作执行AJAX请求 尽管使用JSON操作发布的数据不敏感,但它是专有的,我担心任何人都可以通过跨域调用或自定义应用程序调用返回JSON的操作。有没有办法只允许我的MVC应用程序网页访问返回JSON的操作?ODATA对解决这个问题有什么好处吗Asp.net mvc 如何确保对返回JSON的MVC操作的访问,asp.net-mvc,ajax,json,asp.net-mvc-3,odata,Asp.net Mvc,Ajax,Json,Asp.net Mvc 3,Odata,我有一个面向公众的网站,是用ASP.NETMVC3开发的。MVC应用程序包含具有返回JSON的操作的控制器。网页根据返回JSON的操作执行AJAX请求 尽管使用JSON操作发布的数据不敏感,但它是专有的,我担心任何人都可以通过跨域调用或自定义应用程序调用返回JSON的操作。有没有办法只允许我的MVC应用程序网页访问返回JSON的操作?ODATA对解决这个问题有什么好处吗 有人知道有哪些资源将此问题描述为一种负担以及如何解决它吗?如果您的应用程序是公共的,那么它就更棘手了。有一个ValidateA
有人知道有哪些资源将此问题描述为一种负担以及如何解决它吗?如果您的应用程序是公共的,那么它就更棘手了。有一个
ValidateAntiForgeryToken
属性,可以帮助防止XSS和随机请求
如果您有受密码保护的站点,请使用Authorize
属性
OData与MVC站点存在相同的问题。我有类似的设置,但在我的iOS设备中,必须与以JSON响应的页面进行通信。最后,我创建了一个
actionfilteratAttribute
,用于验证该设备1)是否通过其UDId添加到允许的设备列表中,2)分配给该设备的用户是否处于活动状态(当前使用)。问题是,这迫使我发布请求,这对我来说确实不是问题,但对你来说可能是,因为你可能允许GET请求。我也可能是错的,我认为模型绑定器仍然可以解析GET请求中的对象,并且过滤器可能仍然可以工作
无论如何,以下是我的过滤器的代码,如您所见:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
internal sealed class VerifyDeviceAttribute : ActionFilterAttribute {
[Inject]
public DeviceProvider DeviceProvider { private get; set; }
public override void OnActionExecuting(
ActionExecutingContext ActionExecutingContext) {
string UDId = ActionExecutingContext.HttpContext.Request.Form["Authorization.UDId"];
if (this.DeviceProvider.Exists(UDId) && !this.DeviceProvider.Get(UDId).User.Active) {
ActionExecutingContext.Controller.ViewData.ModelState.AddModelError("User", "The user is not active");
} else if (!this.DeviceProvider.Exists(UDId)) {
ActionExecutingContext.Controller.ViewData.ModelState.AddModelError("UDId", "The UDId is empty");
};
}
}
您可能会注意到,我正在将错误推入控制器
ModelState
,如果有,并且在操作结果中,我总是在格式化响应之前检查模型状态,因此请确保您总是检查ModelState
如果您使用的是角色,您可以使用Authorize属性限制访问。如果您真的想要获得安全,您可以像对待数据库一样对待返回JSON的控制器,并将其部署到防火墙后面的单独应用程序,而前端边缘服务器位于DMZ中
客户端可以连接到前端web服务器,前端web服务器反过来调用防火墙后面的JSON资源。客户端无法直接连接到JSON资源。您可以使用ValidateAntiForgeryToken来防止人们对您的方法发出请求。但是,由于您使用的是数据客户端,因此,一旦数据发送到客户端,他们就有很多其他方法可以访问您的数据。您几乎无法(如果有的话)阻止以某种方式挖掘您允许公开访问的数据或信息